Ribbon的重试机制是基于Spring Retry,须要引用相关包:html
<dependency> <groupId>org.springframework.retry</groupId> <artifactId>spring-retry</artifactId> </dependency>
在添加了包引用后,重试机制自动生效,相关配置以下:git
ribbon:
retryableStatusCodes: 404,502
OkToRetryOnAllOperations: false
MaxAutoRetries: 0
MaxAutoRetriesNextServer: 1
参数详细解:github
默认状况下,Ribbon不会针对HTTP非正常响应状态值(如40四、502等)进行重试。若是您须要对特殊的Http状态进行重试,须要配置该参数。spring
这个参数指的是是否容许全部的HTTP请求(GET,POST,PUT等)重试。默认值是false,只容许GET请求重试。对于POST等请求,请慎重使用。spa
这个参数用于配置当前实例最大重试次数,默认值为0。重试次数不包括第一次请求。code
这个参数指的是切换实例最大重试次数,默认值1。htm
若是访问当前实例异常,会再次尝试访问当前实例(次数由MaxAutoRetries决定);若是还不行,就会访问下一个实例;若是仍然不行,会把下一个实例做为当前实例并重试(次数由MaxAutoRetries决定)...依此类推,直到切换实例次数达到上限(由MaxAutoRetriesNextServer决定)。总共的重试次数计算公式:blog
1+MaxAutoRetries*(MaxAutoRetriesNextServer+1)+MaxAutoRetriesNextServer
新版Feign中无缝集成了Ribbon(不管您是否真的须要Ribbon😂),因此Ribbon的重试配置在Feign中仍然有效。虽然Feign自己具有重试功能,但不建议使用,由于会和Ribbon的重试一块儿使用会形成混乱。路由
由于Zuul也使用了Ribbon,因此只需配置Ribbon便可:get
zuul:
#全局配置是否启用重试
retryable: true
routes:
sample:
#按路由配置
retryable: false
#重试配置
ribbon:
OkToRetryOnAllOperations: false
MaxAutoRetries: 0
MaxAutoRetriesNextServer: 1
上述配置中,首先经过zuul.retryable全局启用重试,固然也能针对路由配置(配置中禁用了sample路由的重试)。而后配置Ribbon的重试策略。
P.S. 别忘了引用spring-retry包。