今天给大家介绍一个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