linear_retry.go 760 B

123456789101112131415161718192021222324252627282930313233343536
  1. package retry
  2. import (
  3. "time"
  4. )
  5. // LinearRetryRule 线性增长等待时间重试规则
  6. type LinearRetryRule struct {
  7. baseDelay time.Duration // 基础等待时间
  8. maxDelay time.Duration // 单次最大等待时间
  9. }
  10. var DefaultLinearRetryRule = NewLinearRetryRule(DefaultBaseDelay, DefaultMaxDelay)
  11. func NewLinearRetryRule(baseDelay time.Duration, maxDelay time.Duration) LinearRetryRule {
  12. if baseDelay < 0 {
  13. baseDelay = DefaultBaseDelay
  14. }
  15. if maxDelay < 0 {
  16. maxDelay = DefaultMaxDelay
  17. }
  18. return LinearRetryRule{
  19. baseDelay: baseDelay,
  20. maxDelay: maxDelay,
  21. }
  22. }
  23. func (r LinearRetryRule) GetDelay(attempts int) time.Duration {
  24. delay := r.baseDelay * time.Duration(attempts)
  25. if delay > r.maxDelay {
  26. return r.maxDelay
  27. }
  28. return delay
  29. }