您的位置:首页 > 健康 > 养生 > go语言中的一个优雅的冥等补偿算法 backoff - 业务逻辑重试示例

go语言中的一个优雅的冥等补偿算法 backoff - 业务逻辑重试示例

2024/12/22 6:21:20 来源:https://blog.csdn.net/tekin_cn/article/details/139259145  浏览:    关键词:go语言中的一个优雅的冥等补偿算法 backoff - 业务逻辑重试示例

今天给大家介绍一个go语言里面的冥等补偿算法库 backoff, 他可以用来对我们需要冥等补偿的业务逻辑进行重试,我们可以设定一个最大间隔时间, 停止时间等重试规则,废话不多说直接三示例:

业务逻辑重试示例

exp := backoff.NewExponentialBackOff()exp.MaxElapsedTime = 2 * time.Minute // 最大间隔时间,表示这个设定的时间之后就会自动重试, 如果是 0 则一直执行b := backoff.BackOff(exp)if exp.MaxElapsedTime == 0 {b = backoff.WithMaxRetries(exp, 0)}var edition *database.ReadResulterr = backoff.RetryNotify(func() error {//你需要重试的业务逻辑return nil},b,func(err error, d time.Duration) {//重试失败后的提示信息log.Printf("Couldn't process, retrying in %v: %v", d, err)},)

ExponentialBackOff默认的配置


// Default values for ExponentialBackOff.
const (DefaultInitialInterval     = 500 * time.MillisecondDefaultRandomizationFactor = 0.5DefaultMultiplier          = 1.5DefaultMaxInterval         = 60 * time.SecondDefaultMaxElapsedTime      = 15 * time.Minute
)

使用方法:

1. 安装backoff依赖
go get -u github.com/cenkalti/backoff/v4

2. 新建一个backoff对象 exp := backoff.NewExponentialBackOff()

3. 根据上面的示例和文档优雅的使用把!

使用文档地址:

 backoff package - github.com/cenkalti/backoff/v4 - Go Packages

Github地址:

https://github.com/tekintian/go-backoff

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com