我正在使用混合的Spring-Cloud + feign + spring-retry来帮助客户端重试请求(都是基于Kotlin的后端(
我的弹簧靴会议是这样的:
myApp:
ribbon:
OkToRetryOnAllOperations: true
retryableStatusCodes: 404, 503
(注意:OkToRetryOnAllOperations=true 仅用于重试 POST/PUT 请求(
重试 404 和 503 HTTP 代码听起来不错,但我无法弄清楚是否有"经典"或"默认"的错误代码列表要重试。 是否存在这种良好做法?
我们假设所有请求在服务器端都是幂等的(如果不是,重试可能会导致问题(。
作为一个非常粗略的经验法则:
4XX - 客户端做了坏事
5XX - 服务器做了坏事
但这在很大程度上取决于实际的 API.
你应该重试 500 吗?也许是因为服务器在连接到数据库时出现了意外的打嗝。或者,也许您正在发送一些它意想不到的东西,而不是返回您 4XX,它会崩溃。
通常没有太多理由重试 404,除非您预计会出现此资源。
唯一有效的重试 HTTP 代码是 408、502、503 和 504
AWS 客户端还会重试 429。
一般来说,我推荐这些:
- 408 请求超时
- 425 太早 了
- 429 请求过多
- 500 内部服务器错误
- 502 错误的网关
- 503 服务不可用
- 504 网关超时
但它实际上取决于 API,因此您可以查找其文档(如果有(。例如,Whatsapp 使用 500 表示可以重试或不重试的错误。