【问题标题】:What are the http codes to automatically retry the request?自动重试请求的 http 代码是什么?
【发布时间】:2019-01-17 02:22:50
【问题描述】:

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

我的 spring-boot conf 是这样的:

myApp:
  ribbon:
    OkToRetryOnAllOperations: true
    retryableStatusCodes: 404, 503

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

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

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

【问题讨论】:

  • 这些代码也可能与重试请求相关:408、500、502、504 ?

标签: spring spring-boot kotlin spring-cloud-feign spring-retry


【解决方案1】:

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

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

通常没有太多理由重试 404,除非您预计该资源会出现。

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

【讨论】:

  • 感谢您的回复。我认为 404 在客户端出现网络问题的情况下是相关的,你不觉得吗?
  • 不,因为这些是服务器返回的错误。你得到 404 的事实意味着你设法到达服务器。
  • 你说得对,如果资源不存在,重试就不可能出现...谢谢!
  • 429s 也可以重试。
  • 只有在知道等待什么的情况下才重试 429。您正在创建过度的负载,并且您的重试可能会不断耗尽速率限制配额。
猜你喜欢
  • 2018-02-24
  • 1970-01-01
  • 2021-06-11
  • 2018-04-26
  • 1970-01-01
  • 2020-07-28
  • 1970-01-01
  • 2013-07-25
  • 2019-03-30
相关资源
最近更新 更多