为啥我们在重试请求之间应用延迟

Posted

技术标签:

【中文标题】为啥我们在重试请求之间应用延迟【英文标题】:Why we apply delay between retry requests为什么我们在重试请求之间应用延迟 【发布时间】:2016-12-01 10:09:08 【问题描述】:

当我们有一段代码经常失败并且必须重试时。然后我们使用重试模式。

try 
        //do request here
 catch (Exception e) 
        //wait for some millisecond and retry
        retry();

我们通常会延迟几毫秒,然后再重试该请求。我想知道为什么我们需要一些延迟?如果重试请求没有等待并再次发送请求会发生什么。

【问题讨论】:

可能发生的情况是,您用请求敲击服务器并可能使问题变得更糟 服务器的问题不太可能在几微秒内得到解决,因此立即重试不太可能奏效,正如 JonK 所说,只会导致问题。 这样我们才不会让原来的问题变得更糟。 噢,我明白了。非常感谢您根据我的知识添加这​​个概念。 在你手工构建大量这样的东西之前,还要检查有许多现成的用于重试和其他弹性的原语的库,例如github.com/jhalterman/failsafe [没有个人参与] 【参考方案1】:

服务器的问题不太可能在几微秒内得到解决,因此立即重试不太可能奏效,只会导致问题。因此,重试之间的延迟是最佳实践。

【讨论】:

以上是关于为啥我们在重试请求之间应用延迟的主要内容,如果未能解决你的问题,请参考以下文章

Azure 服务总线可以在重试消息之前延迟吗?

Polly 在重试时更改查询字符串

AWS SQS:延迟使无法处理的消息可用

修改有效载荷的 Alamofire 重试请求

URLSession dataTaskPublisher 在特定错误延迟后重试

如何重试 Promise 解决 N 次,尝试之间有延迟?