application.yml
ribbon:
#请求连接的超时时间,单位为毫秒,默认为1000
ConnectTimeout: 6000
#请求处理的超时时间,单位为毫秒,默认为1000
ReadTimeout: 6000
# 是否对所有请求都进行重试。false(默认)-只对get请求进行重试;true-对所有请求进行重试(对于put或post等写操作,如果服务器接口没做幂等性,重试会产生不好的结果)!!!
OkToRetryOnAllOperations: false
# 每个实例重试次数,不包括首次请求,默认为0。当Eureka中可以找到服务,但是服务连不上时将会重试
MaxAutoRetries: 0
# 重试的时候实例切换次数,不包括首次请求,默认为1。包括单机版的服务,也会重试。
MaxAutoRetriesNextServer: 1
# 因为ribbon的重试机制和Feign的重试机制有冲突,所以源码中默认关闭Feign的重试机制,建议不要开启
feign:
hystrix:
enabled: true
hystrix:
command:
default:
execution:
isolation:
thread:
# 如果配置了ribbon的重试,hystrix的超时时间要大于ribbon的超时时间,ribbon才会重试
timeoutInMilliseconds: 3000
Ribbon超时与Hystrix超时问题,为了确保Ribbon重试的时候不被熔断,我们就需要让Hystrix的超时时间大于Ribbon的超时时间,否则Hystrix命令超时后,该命令直接熔断,重试机制就没有任何意义了。hystrix的超时时间最好大于(ConnectTimeout+ReadTimeout)*(MaxAutoRetries+1)*(MaxAutoRetriesNextServer+1)
。
默认情况下,GET
方式请求无论是连接异常还是读取异常,都会进行重试 ,非GET
方式请求,只有连接异常时,才会进行重试。
hystrix
超时时间应该大于:(MaxAutoRetries+1)*(MaxAutoRetriesNextServer+1) * (ConnectTimeout+ReadTimeout)