GCP PubSub重试退避时间重试、时间、GCP、PubSub

2023-09-03 15:02:00 作者:北葵向暖

我为我的Google发布/订阅订阅配置了一个死信策略:

...
  dead_letter_policy {
    dead_letter_topic = foobar
    max_delivery_attempts = x
  }

  {
    "minimumBackoff": y,
    "maximumBackoff": z
  }
...
输入各种值后,我没有看到重试发生在我预期的时间。例如

最大交付尝试次数:5 最小退避:10秒 最大退避:300秒

GCP

重试间隔秒数: 15个 17 20个 29

最大交付尝试次数:30 最小退避:5秒 最大退避:600秒

重试间隔秒数: 12个 9. 9. 14. 15个 18 24个 24个 45 44 58 八十一 八十二 120 ...等等。

从这项测试中,您似乎需要一个较高的最大尝试次数值才能获得实际的指数退避?对于我的第一个数据集,我原本预计我最后两次尝试的时间应该接近300。从我的第二个数据集来看,似乎只有在将最大尝试次数设置为最大值100的情况下才会出现这种情况。此假设正确吗?

(还有,这是请求订阅)

谢谢

推荐答案

相关答案:How does the exponential backoff configured in Google Pub/Sub's RetryPolicy work?

基于MINIMUM_BACKOFF和MAXIMUM_BACKOFF的指数回退大致遵循上述问题中提到的公式(带有随机化因子)。您问题相关因素包括

推导退避间隔时,最大退避不在计算范围内。最大退避设置用于确保我们的退避不会超过配置的退避,即使退避间隔计算得出这样的结果。从您的测试中可以看出,间隔持续时间的增长速度仍会随着重试而增加。 导致退避间隔增长的乘数是系统内部详细信息,客户端不应依赖它。

如果希望最大回退发生在死信事件发生之前,我建议从较高的最小回退配置开始。