简介:

ribbon实现了负载均衡,如果访问某服务的A节点超时后,会触发ribbon的重试机制

Ribbon是Netflix发布的负载均衡器,它有助于控制HTTP和TCP的客户端的行为。为Ribbon配置服务提供者地址后,Ribbon就可基于某种负载均衡算法,自动地帮助服务消费者去请求。Ribbon默认为我们提供了很多负载均衡算法,例如轮询、随机等。当然,我们也可为Ribbon实现自定义的负载均衡算法。 在Spring Cloud中,当Ribbon与Eureka配合使用时,Ribbon可自动从Eureka Server获取服务提供者地址列表,并基于负载均衡算法,请求其中一个服务提供者实例。在Spring Cloud 构建的微服务中,Ribbon作为服务消费者的负载均衡器,有两种使用方式,一种是与RestTemplate相结合,另一种是与Feign相结合。
 

application.yml

ribbon:
  #连接超时时间(ms)
  ConnectTimeout: 6000
  #业务逻辑超时时间(ms)
  ReadTimeout: 6000
  #同一台实例最大重试次数,不包括首次调用(对当前实例的重试次数)
  MaxAutoRetries: 1
  #重试负载均衡其他的实例最大重试次数,不包括首次调用(切换实例的重试次数)
  MaxAutoRetriesNextServer: 2
  #是否所有操作都重试
  ribbon.OkToRetryOnAllOperations: false

pom中引入依赖 

<dependency>
	<artifactId>spring-retry</artifactId>
	<groupId>org.springframework.retry</groupId>
</dependency>

ribbon.MaxAutoRetries 设置为1,请求某服务6s超时后准备重试,该重试策略会先尝试再访问该实例,如果失败1次之后才更换实例访问。 ribbon.MaxAutoRetriesNextServer 决定了尝试更换2次实例。

Ribbon整合Eureka

重试机制

因为在微服务的实际生产环境中,有可能出现一种情况:某些服务的其中部分实例临时不可用。所以,我们希望能够提供一种重试的机制。比如:aservice-sms服务可以启动多个实例,当实例1由于某些原因(网络等)瞬时无法正常响应服务时,为了保证业务正常执行,所以自动的向该服务的其他实例发起请求。这就是微服务的调用的“重试机制”。

 

 需要注意的是:Ribbon有重试机制,Feign和OpenFeign也有重试机制(后面章节会介绍)。Feign和OpenFeign的底层就是Ribbon,所以当项目使用了Feign或OpenFeign的重试机制,就不要开启Ribbon的重试机制,反之亦然。否则重试配置重叠,实际重试次数是二者的笛卡尔积。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐