Documentation
¶
Index ¶
- Constants
- Variables
- func Do(f PlayFun) ([]any, error)
- func VAndError[T any](values []any) (T, error)
- type DelayCalculator
- func DelayCalculatorExponential(min_, max_ time.Duration) DelayCalculator
- func DelayCalculatorLinear(min_, max_ time.Duration, increment_ time.Duration) DelayCalculator
- func DelayCalculatorWithEqualJitter(d DelayCalculator) DelayCalculator
- func DelayCalculatorWithFullJitter(d DelayCalculator) DelayCalculator
- type PlayFun
- type Retry
- type SetValue
Constants ¶
const DefaultRetryMax = 3
Variables ¶
var DefaultDelayCalculator = DelayCalculatorWithEqualJitter( DelayCalculatorExponential(200*time.Millisecond, 2*time.Second), )
DefaultDelayCalculator 指数退避+均匀抖动. 使用指数退避+均匀抖动可以避免多个实例出现同一时刻的时间间隔. 延迟从 100ms+random(100)ms 开始, 第二次重试等待 200ms+random(200)ms , 第三次重试等待 400ms+random(400)ms... 最大延迟不超过 2s.
Functions ¶
Types ¶
type DelayCalculator ¶ added in v0.6.0
DelayCalculator 延迟计算器. 它应该被设计为无状态的, 因为它可能被多个goroutine调用, 所以你不能使用斐波拉契退避和装饰性抖动.
- DelayCalculatorExponential(指数退避): 使用场景: 指数退避增长迅速, 适用于给予服务器时间来恢复错误。
- DelayCalculatorLinear(线性退避): 使用场景:适用于对错误尽快重试, 迫切的想要服务器尽快恢复, 线性退避的重试频率更高。
下面函数将在延迟时间基础上进行抖动, 使其更加随机和分散.
- DelayCalculatorWithFullJitter(全抖动): 使用场景:适用于需要减少重试间隔时间的增长。
- 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 Retry ¶
type Retry struct {
// contains filtered or unexported fields
}
func New ¶ added in v0.7.0
New 创建重试器. retryMax 指定重试最大次数, 当小于等于0时, 使用 DefaultRetryMax. 默认使用 DefaultDelayCalculator 获取重试间隔, 如果需要自定义间隔, 请使用 Retry.SetDelayCalculator.
func (*Retry) SetDelayCalculator ¶ added in v0.7.0
func (r *Retry) SetDelayCalculator(calculator DelayCalculator) *Retry
SetDelayCalculator 设置 DelayCalculator, 为nil时, 使用 DefaultDelayCalculator.