由于Eureka的剔除延迟,导致一个服务挂了以后(未从列表剔除期间),访问到这台宕机服务器的请求就会报错,而此时明明有可以提供相同服务的其他服务器在正常运行,这不是我们想看到的。
第一步:引入依赖
第二步:在服务消费方添加配置(yaml文件中的元素不能重复,举例:如果文件中已经配置了spring:开头的配置,开启重试功能的配置请添加到该配置下,否则项目无法启动)
spring:
cloud:
loadbalancer:
retry:
enabled: true # 开启Spring Cloud的重试功能
user-service:
ribbon:
ConnectTimeout: 250 # 毫秒 Ribbon的连接超时时间
ReadTimeout: 1000 # 毫秒 Ribbon的数据读取超时时间
OkToRetryOnAllOperations: true # 是否对所有操作都进行重试
MaxAutoRetriesNextServer: 1 # 切换实例的重试次数
MaxAutoRetries: 1 # 对当前实例的重试次数
这样当访问到宕机且没来得及剔除的服务,就会去尝试切换服务实例,重试次数取决于MaxAutoRetriesNextServer。尝试指定次数后还是找不到能正常响应的服务实例才会报错。