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

2024-05-28 12:12

本文主要是介绍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

这篇关于go语言中的一个优雅的冥等补偿算法 backoff - 业务逻辑重试示例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1010531

相关文章

利用Python实现可回滚方案的示例代码

《利用Python实现可回滚方案的示例代码》很多项目翻车不是因为不会做,而是走错了方向却没法回头,技术选型失败的风险我们都清楚,但真正能提前规划“回滚方案”的人不多,本文从实际项目出发,教你如何用Py... 目录描述题解答案(核心思路)题解代码分析第一步:抽象缓存接口第二步:实现两个版本第三步:根据 Fea

Go语言使用slices包轻松实现排序功能

《Go语言使用slices包轻松实现排序功能》在Go语言开发中,对数据进行排序是常见的需求,Go1.18版本引入的slices包提供了简洁高效的排序解决方案,支持内置类型和用户自定义类型的排序操作,本... 目录一、内置类型排序:字符串与整数的应用1. 字符串切片排序2. 整数切片排序二、检查切片排序状态:

python利用backoff实现异常自动重试详解

《python利用backoff实现异常自动重试详解》backoff是一个用于实现重试机制的Python库,通过指数退避或其他策略自动重试失败的操作,下面小编就来和大家详细讲讲如何利用backoff实... 目录1. backoff 库简介2. on_exception 装饰器的原理2.1 核心逻辑2.2

Java计算经纬度距离的示例代码

《Java计算经纬度距离的示例代码》在Java中计算两个经纬度之间的距离,可以使用多种方法(代码示例均返回米为单位),文中整理了常用的5种方法,感兴趣的小伙伴可以了解一下... 目录1. Haversine公式(中等精度,推荐通用场景)2. 球面余弦定理(简单但精度较低)3. Vincenty公式(高精度,

QT6中绘制UI的两种方法详解与示例代码

《QT6中绘制UI的两种方法详解与示例代码》Qt6提供了两种主要的UI绘制技术:​​QML(QtMeta-ObjectLanguage)​​和​​C++Widgets​​,这两种技术各有优势,适用于不... 目录一、QML 技术详解1.1 QML 简介1.2 QML 的核心概念1.3 QML 示例:简单按钮

SQL Server中的PIVOT与UNPIVOT用法具体示例详解

《SQLServer中的PIVOT与UNPIVOT用法具体示例详解》这篇文章主要给大家介绍了关于SQLServer中的PIVOT与UNPIVOT用法的具体示例,SQLServer中PIVOT和U... 目录引言一、PIVOT:将行转换为列核心作用语法结构实战示例二、UNPIVOT:将列编程转换为行核心作用语

Python logging模块使用示例详解

《Pythonlogging模块使用示例详解》Python的logging模块是一个灵活且强大的日志记录工具,广泛应用于应用程序的调试、运行监控和问题排查,下面给大家介绍Pythonlogging模... 目录一、为什么使用 logging 模块?二、核心组件三、日志级别四、基本使用步骤五、快速配置(bas

使用雪花算法产生id导致前端精度缺失问题解决方案

《使用雪花算法产生id导致前端精度缺失问题解决方案》雪花算法由Twitter提出,设计目的是生成唯一的、递增的ID,下面:本文主要介绍使用雪花算法产生id导致前端精度缺失问题的解决方案,文中通过代... 目录一、问题根源二、解决方案1. 全局配置Jackson序列化规则2. 实体类必须使用Long封装类3.

基于Go语言实现Base62编码的三种方式以及对比分析

《基于Go语言实现Base62编码的三种方式以及对比分析》Base62编码是一种在字符编码中使用62个字符的编码方式,在计算机科学中,,Go语言是一种静态类型、编译型语言,它由Google开发并开源,... 目录一、标准库现状与解决方案1. 标准库对比表2. 解决方案完整实现代码(含边界处理)二、关键实现细

如何合理管控Java语言的异常

《如何合理管控Java语言的异常》:本文主要介绍如何合理管控Java语言的异常问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍2、Thorwable类3、Error4、Exception类4.1、检查异常4.2、运行时异常5、处理方式5.1. 捕获异常