一. Spring Cloud 各组件重试
Spring Cloud 各组件的重试配置.
早期, Spring Cloud 的重试机制是比较混乱的 - 各个组件都有自己的重试机制, 例如 Ribbon,Feign,Zuul. 官方也意识到了这个问题, 并对重试相关逻辑进行了改造与简化.
在 Spring Cloud Edgware 中, 配置重试是非常简单的.
重试步骤
1. 重试依赖 spring-retry, 因此引入重试依赖
- <dependency>
- <groupId>org.springframework.retry</groupId>
- <artifactId>spring-retry</artifactId>
- </dependency>
2. 配置重试
- <client>
- ribbon:
- # 同一实例最大重试次数, 不包括首次调用
- MaxAutoRetries: 1
- # 重试其他实例的最大重试次数, 不包括首次所选的 server
- MaxAutoRetriesNextServer: 2
- # 是否所有操作都进行重试
- OkToRetryOnAllOperations: false
其中是 Ribbon Client 名称, 表示对指定名称的 Ribbon Client 进行重试. 如果省略, 则表示对所有 Ribbon Client 都进行重试.
3. 对于 Zuul, 重试特性默认关闭. 可使用 zuul.retryable=true 全局打开重试, 也可使用 zuul.routes..retryable=true 打开指定重试.
? 基于 HTTP 响应码重试
Spring Cloud 也支持基于 HTTP 响应码进行重试, 只需使用类似如下的配置即可:
- <clientName>:
- ribbon:
- retryableStatusCodes: 404,502
关闭重试
1. 对于其它组件, 可配置 spring.cloud.loadbalancer.retry.enabled=false.
2. 对于 zuul, 可配置 zuul.retryable=false 或 zuul.routes..retryable=true.
注意点
Hystrix 的超时时间必须大于超时的时间, 否则, 一旦 Hystrix 超时, 就没办法继续重试了.
一般来说, 不建议将 ribbon.OkToRetryOnAllOperations 设为 true. 因为一旦启用该配置, 则表示重试任何操作, 包括 POST 请求, 而由于缓存了请求体, 此时可能会影响服务器的资源. java B2B2C 多租户电子商城 https://2147775633.iteye.com/blog/2434341 系统
来源: https://www.2cto.com/kf/201905/807134.html