今天给大家介绍一个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.ReadResult
err = 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.Millisecond
DefaultRandomizationFactor = 0.5
DefaultMultiplier = 1.5
DefaultMaxInterval = 60 * time.Second
DefaultMaxElapsedTime = 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地址: