gretry

package module
v1.1.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 17, 2024 License: Apache-2.0 Imports: 6 Imported by: 0

README

介绍

gretry是一个golang的通用重试工具, 它可以用于任何需要重试的场景, 比如网络请求, 数据库操作等, 只要出现了错误你想进行重试, 就可以使用gretry.

Documentation

Index

Constants

View Source
const DefaultRetryMax = 3

Variables

DefaultDelayCalculator 指数退避+均匀抖动. 使用指数退避+均匀抖动可以避免多个实例出现同一时刻的时间间隔. 延迟从 100ms+random(100)ms 开始, 第二次重试等待 200ms+random(200)ms , 第三次重试等待 400ms+random(400)ms... 最大延迟不超过 2s.

Functions

func Do

func Do(f PlayFun) ([]any, error)

Do 使用默认配置的Retry执行, 默认Retry请查看 New 注释.

func VAndError added in v1.1.0

func VAndError[T any](values []any) (T, error)

Types

type DelayCalculator added in v0.6.0

type DelayCalculator func(attemptOfNum int) time.Duration

DelayCalculator 延迟计算器. 它应该被设计为无状态的, 因为它可能被多个goroutine调用, 所以你不能使用斐波拉契退避和装饰性抖动.

  1. DelayCalculatorExponential(指数退避): 使用场景: 指数退避增长迅速, 适用于给予服务器时间来恢复错误。
  1. DelayCalculatorLinear(线性退避): 使用场景:适用于对错误尽快重试, 迫切的想要服务器尽快恢复, 线性退避的重试频率更高。

下面函数将在延迟时间基础上进行抖动, 使其更加随机和分散.

  1. DelayCalculatorWithFullJitter(全抖动): 使用场景:适用于需要减少重试间隔时间的增长。
  1. DelayCalculatorWithEqualJitter(均匀抖动): 使用场景:适用于让间隔时间更加分散, 避免多个实例在同一等待时刻访问服务器。

func DelayCalculatorExponential added in v0.8.0

func DelayCalculatorExponential(min_, max_ time.Duration) DelayCalculator

DelayCalculatorExponential 指数退避. 延迟从 min_ 开始, 第二次重试等待 min_², 第三次重试等待 min_³, ... 最大延迟不超过 max_. 示例: DelayCalculatorExponential(100*time.Millisecond, 2*time.Second),

第一次等待 100ms, 第二次等待 200ms, 第三次等待 400ms, 第四次等待 800ms...

func DelayCalculatorLinear added in v0.8.0

func DelayCalculatorLinear(min_, max_ time.Duration, increment_ time.Duration) DelayCalculator

DelayCalculatorLinear 线性退避. 每次延迟时间固定增加, 最大延迟不超过 max_. 延迟从 min_ 开始, 第二次重试等待 min_+increment_*1, 第三次重试等待 min_+increment_*2,... 示例: DelayCalculatorLinear(100*time.Millisecond, 2*time.Second, 100*time.Millisecond),

第一次等待 100ms, 第二次等待 200ms, 第三次等待 300ms, 第四次等待 400ms...

func DelayCalculatorWithEqualJitter added in v0.8.0

func DelayCalculatorWithEqualJitter(d DelayCalculator) DelayCalculator

DelayCalculatorWithEqualJitter 均匀抖动. 等待时间是 "d结果的一半" 加上 0到"d结果的一半"的随机值. 假设d的结果为100ms, 则等待时间是 50ms+"0-50ms 的随机值".

func DelayCalculatorWithFullJitter added in v0.8.0

func DelayCalculatorWithFullJitter(d DelayCalculator) DelayCalculator

DelayCalculatorWithFullJitter 全抖动. 等待时间是一个0到"d结果"的一个随机值. 假设d的结果为100ms, 则等待时间是 0-100ms 的一个随机值.

type PlayFun

type PlayFun func(set SetValue) error

type Retry

type Retry struct {
	// contains filtered or unexported fields
}

func New added in v0.7.0

func New(retryMax int) *Retry

New 创建重试器. retryMax 指定重试最大次数, 当小于等于0时, 使用 DefaultRetryMax. 默认使用 DefaultDelayCalculator 获取重试间隔, 如果需要自定义间隔, 请使用 Retry.SetDelayCalculator.

func (*Retry) Do

func (r *Retry) Do(f PlayFun) ([]any, error)

Do 将需要导出的内容通过f函数的set参数进行导出, 最终这些导出的内容会在该函数返回

func (*Retry) SetDelayCalculator added in v0.7.0

func (r *Retry) SetDelayCalculator(calculator DelayCalculator) *Retry

SetDelayCalculator 设置 DelayCalculator, 为nil时, 使用 DefaultDelayCalculator.

type SetValue added in v1.1.0

type SetValue func(...any)

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL