为了账号安全,请及时绑定邮箱和手机立即绑定

Google Pub/Sub 的 RetryPolicy 中配置的指数退避如何工作?

Google Pub/Sub 的 RetryPolicy 中配置的指数退避如何工作?

Go
梵蒂冈之花 2022-06-21 10:44:48
该cloud.google.com/go/pubsub库最近发布(在 v1.5.0 中,参见https://github.com/googleapis/google-cloud-go/releases/tag/pubsub%2Fv1.5.0)支持新的RetryPolicy服务器端功能。当前的文档(https://godoc.org/cloud.google.com/go/pubsub#RetryPolicy)为我读过维基百科的文章,虽然它描述了离散时间的指数退避,但我看不出这篇文章与MinimumBackoff和MaximumBackoff参数的具体关系。有关这方面的指导,我参考了github.com/cenkalti/backoffhttps://pkg.go.dev/github.com/cenkalti/backoff/v4?tab=doc#ExponentialBackOff的文档。该库定义ExponentialBackoff为type ExponentialBackOff struct {    InitialInterval     time.Duration    RandomizationFactor float64    Multiplier          float64    MaxInterval         time.Duration    // After MaxElapsedTime the ExponentialBackOff returns Stop.    // It never stops if MaxElapsedTime == 0.    MaxElapsedTime time.Duration    Stop           time.Duration    Clock          Clock    // contains filtered or unexported fields}其中每个随机间隔计算为randomized interval =    RetryInterval * (random value in range [1 - RandomizationFactor, 1 + RandomizationFactor])RetryInterval当前的重试间隔在哪里,据我所知,它从 的值开始并以InitialInterval为上限MaxInterval。我是否正确理解MinimumBackoffandMaximumBackoff对应于InitialIntervaland MaxIntervalin github.com/cenkalti/backoff?也就是说,MinimumBackoff是初始等待时间,MaximumBackoff是重试之间允许的最大时间量?
查看完整描述

1 回答

?
忽然笑

TA贡献1806条经验 获得超5个赞

最小退避和最大退避的重试策略字段类似于上面示例中的 InitialInterval 和 MaxInterval。Cloud Pub/Sub 使用您提到的类似公式来计算指数延迟。这也包括随机化。

在 MaxInterval 之后,每次后续重试都会增加 MaxInterval 延迟。如果您想在尝试一定次数后停止重试,我们建议使用死信队列


查看完整回答
反对 回复 2022-06-21
  • 1 回答
  • 0 关注
  • 180 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信