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

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)为

http://img.mukewang.com/62b130bc0001beb114490731.jpg

我读过维基百科的文章,虽然它描述了离散时间的指数退避,但我看不出这篇文章与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是重试之间允许的最大时间量?


梵蒂冈之花
浏览 181回答 1
1回答

忽然笑

最小退避和最大退避的重试策略字段类似于上面示例中的 InitialInterval 和 MaxInterval。Cloud Pub/Sub 使用您提到的类似公式来计算指数延迟。这也包括随机化。在 MaxInterval 之后,每次后续重试都会增加 MaxInterval 延迟。如果您想在尝试一定次数后停止重试,我们建议使用死信队列。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go