Spring Cloud常用组件重试总结

Ribbon的重试配置

Ribbon的重试机制是基于Spring Retry,需要引用相关包:

<dependency>
    <groupId>org.springframework.retry</groupId>
    <artifactId>spring-retry</artifactId>
</dependency>

在添加了包引用后,重试机制自动生效,相关配置如下:

ribbon:
  retryableStatusCodes: 404,502
  OkToRetryOnAllOperations: false
  MaxAutoRetries: 0
  MaxAutoRetriesNextServer: 1

参数详细解:

retryableStatusCodes

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

OkToRetryOnAllOperations

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

MaxAutoRetries

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

MaxAutoRetriesNextServer

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

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

1+MaxAutoRetries*(MaxAutoRetriesNextServer+1)+MaxAutoRetriesNextServer

Feign的重试配置

新版Feign中无缝集成了Ribbon(无论您是否真的需要Ribbon😂),所以Ribbon的重试配置在Feign中仍然有效。虽然Feign本身具备重试功能,但不建议使用,因为会和Ribbon的重试一起使用会造成混乱。

Zuul的重试配置

因为Zuul也使用了Ribbon,所以只需配置Ribbon即可:

zuul:
#全局配置是否启用重试
retryable: true
routes:
sample:
#按路由配置
retryable: false

#重试配置
ribbon:
OkToRetryOnAllOperations: false
MaxAutoRetries: 0
MaxAutoRetriesNextServer: 1

上述配置中,首先通过zuul.retryable全局启用重试,当然也能针对路由配置(配置中禁用了sample路由的重试)。然后配置Ribbon的重试策略。

P.S. 别忘了引用spring-retry包。

参考链接

posted @ 2019-08-28 16:14  中本傻  阅读(1363)  评论(0编辑  收藏  举报