自动重试请求的http代码是什么?

Jer*_*y L 5 spring kotlin spring-retry spring-boot spring-cloud-feign

我正在使用混合 Spring-Cloud + feign + spring-retry 来帮助在客户端重试请求(都是基于 Kotlin 的后端)

我的 spring-boot conf 是这样的:

myApp:
  ribbon:
    OkToRetryOnAllOperations: true
    retryableStatusCodes: 404, 503
Run Code Online (Sandbox Code Playgroud)

(注意:OkToRetryOnAllOperations=true 仅用于重试 POST/PUT 请求)

重试 404 和 503 HTTP 代码听起来不错,但我不知道是否有要重试的“经典”或“默认”错误代码列表。这种好的做法存在吗?

我们假设所有请求在服务器端都是幂等的(如果不是,重试可能会导致问题)。

Luc*_*uez 15

一般来说,我推荐这些:

  • 408 请求超时
  • 425 太早了
  • 429 请求过多
  • 500内部服务器错误
  • 502错误的网关
  • 503服务不可用
  • 504网关超时

但这实际上取决于 API,因此您可以查找其文档(如果有)。例如,Whatsapp 使用 500 表示可以重试或不可重试的错误。

  • 不,但你应该准备好你的杯子 (5认同)

Ale*_*hin 5

作为一个非常粗略的经验法则:
4XX - 客户端做了坏事
5XX - 服务器做了坏事

但这在很大程度上取决于实际的 API。
你应该重试 500 吗?也许是因为服务器在连接到数据库时出现了意外的问题。或者,也许您向它发送了它不期望的东西,而不是返回 4XX,它崩溃了。

通常没有太多理由重试 404,除非您期望此资源会出现。

唯一对重试有效的 HTTP 代码是 408、502、503 和 504

  • 429 也是可重试的。 (6认同)
  • 不,因为这些是服务器返回的错误。您获得 404 的事实意味着您设法访问了服务器。 (3认同)
  • 你是对的,如果资源不存在,重试就不可能让它出现......谢谢! (2认同)