Ribbon的超时和重试机制
文章目录application.ymlprovider控制台application.ymlribbon:#连接超时时间(ms)ConnectTimeout: 1000#业务逻辑超时时间(ms)ReadTimeout: 2000#同一台实例最大重试次数,不包括首次调用MaxAutoRetries: 3#重试负载均衡其他的实例最大重试次数,不包括首次调用MaxAutoRetriesNextServer
简介:
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的重试机制,反之亦然。否则重试配置重叠,实际重试次数是二者的笛卡尔积。
更多推荐
所有评论(0)