个人技术分享

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

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