最近用spring cloud Netflix 组件的时候, 调用其他服务时不时就报超时错误,不是请求超时,就是连接超时。
上网搜了一大堆帖子,百分之九十 都是对 feign ribbon hystrix 三大组件设置超时时间;但是我设置后,依然没用,该超时还是超时。
一开始以为是超时时间配置没生效,于是自己本地手动去测试调用接口,但是发现超时配置实际上是生效了,那为什么还会超时呢? 查资料发现可能是由于feign由于网络问题经常会请求头丢失之类的, 但是feign也是有重试机制的,于是我就去查关于feign的重试机制的相关信息。
终于让我找到了答案!!
Feign的重试机制在源码中默认关闭的,因为Ribbon的重试机制和Fiegn原来的重试机制冲突,所以在一般情况下,Feign的重试机制指的就是Ribbon的重试机制。
只要给ribbon配置上下面这段代码即可
##Ribbon超时重试配置
ribbon:
ConnectTimeout: 20000 #毫秒 连接超时时间
ReadTimeout: 20000 #毫秒 逻辑处理超时时间
OkToRetryOnAllOperations: true # 是否对所有操作都进行重试
MaxAutoRetries: 2 # 对当前实例的最大重试次数(请求服务超时6s则会再请求一次)
MaxAutoRetriesNextServer: 1 # 切换实例的最大重试次数(如果还失败就切换下
有用的话请在评论区告诉小编,欢迎交流和指正!