Spring Cloud经常使用组件重试总结

Ribbon的重试配置

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

retryableStatusCodes

默认状况下,Ribbon不会针对HTTP非正常响应状态值(如40四、502等)进行重试。若是您须要对特殊的Http状态进行重试,须要配置该参数。spring

OkToRetryOnAllOperations

这个参数指的是是否容许全部的HTTP请求(GET,POST,PUT等)重试。默认值是false,只容许GET请求重试。对于POST等请求,请慎重使用。spa

MaxAutoRetries

这个参数用于配置当前实例最大重试次数,默认值为0。重试次数不包括第一次请求。code

MaxAutoRetriesNextServer

这个参数指的是切换实例最大重试次数,默认值1。htm

若是访问当前实例异常,会再次尝试访问当前实例(次数由MaxAutoRetries决定);若是还不行,就会访问下一个实例;若是仍然不行,会把下一个实例做为当前实例并重试(次数由MaxAutoRetries决定)...依此类推,直到切换实例次数达到上限(由MaxAutoRetriesNextServer决定)。总共的重试次数计算公式:blog

1+MaxAutoRetries*(MaxAutoRetriesNextServer+1)+MaxAutoRetriesNextServer

Feign的重试配置

新版Feign中无缝集成了Ribbon(不管您是否真的须要Ribbon😂),因此Ribbon的重试配置在Feign中仍然有效。虽然Feign自己具有重试功能,但不建议使用,由于会和Ribbon的重试一块儿使用会形成混乱。路由

Zuul的重试配置

由于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包。

参考连接

相关文章
相关标签/搜索