• Rabbin负载均衡—-提供客户端的负载均衡,基于HTTP和TCP
  • Nginx负载均衡—-属于服务器端的负载均衡

image.png

  • 重试

    创建sp06-ribbon,添加以下依赖,还要引入sp01的依赖

    image.png

    yml

    ```java spring: application: name: ribbon

server: port: 3001

eureka: client: service-url: defaultZone: http://eureka1:2001/eureka, http://eureka2:2002/eureka //Eureka的功能

  1. <a name="VAMEf"></a>
  2. ### 添加ribbon的负载均衡功能
  3. <a name="OCh0i"></a>
  4. ### *RestTemplate 设置 `@LoadBalanced--消费者添加`
  5. `@LoadBalanced` 负载均衡注解,会对 `RestTemplate` 实例进行封装,创建动态代理对象,并切入(AOP)负载均衡代码,把请求分发到集群中的服务器
  6. 写restTemplate的配置文件,在消费者Controller层加@LoadBalanced注解,写服务提供者的访问地址(这里的访问地址为多个消费者用的同一个Eureka服务名)![image.png](https://cdn.nlark.com/yuque/0/2021/png/2961789/1611654290661-c506bfdd-cd96-4999-824c-6e324bad9c55.png#align=left&display=inline&height=21&margin=%5Bobject%20Object%5D&name=image.png&originHeight=21&originWidth=695&size=31292&status=done&style=none&width=695)<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/2961789/1613965113635-fc1b3166-b6ab-4480-9189-9f50dfb1c1c7.png#align=left&display=inline&height=269&margin=%5Bobject%20Object%5D&name=image.png&originHeight=269&originWidth=559&size=88055&status=done&style=none&width=559)
  7. ---
  8. 默认消费者访问生产者是(RoundRobinRule)轮询策略,一共有7个负载均衡策略<br />随机策略(RandomRule),重试策略(RetryRule)----先按照轮询策略分发,如果分发不到服务器<br />则在指定的时间内进行重试,分发其他可用服务器; <br />重试策略:在消费者的配置类里面填写以下代码![image.png](https://cdn.nlark.com/yuque/0/2021/png/2961789/1611660248094-d10acf45-9e5a-4f69-8b92-287ae3167287.png#align=left&display=inline&height=57&margin=%5Bobject%20Object%5D&name=image.png&originHeight=57&originWidth=787&size=52401&status=done&style=none&width=787)<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/2961789/1611659780529-6756c297-6ab2-4595-9499-6a044aa569da.png#align=left&display=inline&height=105&margin=%5Bobject%20Object%5D&name=image.png&originHeight=105&originWidth=528&size=49887&status=done&style=none&width=528)
  9. ![](https://cdn.nlark.com/yuque/0/2021/png/2961789/1611039154917-1009d844-9374-4c96-873b-226ea34f0b6f.png#align=left&display=inline&height=255&margin=%5Bobject%20Object%5D&originHeight=255&originWidth=753&size=0&status=done&style=none&width=753)
  10. <a name="ap2gX"></a>
  11. ### 添加spring-retry 依赖(添加重试)
  12. ```java
  13. <dependency>
  14. <groupId>org.springframework.retry</groupId>
  15. <artifactId>spring-retry</artifactId>
  16. </dependency>

ribbon(负载均衡、重试)对RestTemplate进行了封装 - 图3

  • MaxAutoRetries 单台服务器的重试次数—最多可失败6次
  • MaxAutoRetriesNextServer 更换服务器次数

yml配置ribbon重试

ribbon:
  MaxAutoRetriesNextServer: 2
  MaxAutoRetries: 1
  OkToRetryOnAllOperations: true   //默认只对GET请求重试, 当设置为true时, 对POST等所有类型请求都重试

Rest 请求模板解读

image.png