| 123456789101112131415161718192021222324252627282930313233343536373839 |
- package retry
- import (
- "math/rand"
- "time"
- )
- // RandomRetryRule 随机等待时间重试规则
- type RandomRetryRule struct {
- minDelay time.Duration // 最小随机等待时间
- maxDelay time.Duration // 最大随机等待时间
- }
- var DefaultRandomRetryRule = NewRandomRetryRule(DefaultRandomMinDelay, DefaultRandomMaxDelay)
- func NewRandomRetryRule(minDelay time.Duration, maxDelay time.Duration) RandomRetryRule {
- if minDelay < 0 {
- minDelay = DefaultRandomMinDelay
- }
- if maxDelay < 0 {
- maxDelay = DefaultRandomMaxDelay
- }
- if maxDelay < minDelay {
- minDelay = DefaultRandomMinDelay
- maxDelay = DefaultRandomMaxDelay
- }
- return RandomRetryRule{
- minDelay: minDelay,
- maxDelay: maxDelay,
- }
- }
- func (r RandomRetryRule) GetDelay(attempts int) time.Duration {
- delay := r.minDelay + time.Duration(rand.Int63n(int64(r.maxDelay-r.minDelay+1)))
- return delay
- }
|