Documentation
¶
Overview ¶
Package goback implements a simple exponential backoff
An exponential backoff approach is typically used when treating with potentially faulty/slow systems. If a system fails quick retries may exacerbate the system specially when the system is dealing with several clients. In this case a backoff provides the faulty system enough room to recover.
Simple example:
func main() {
b := &goback.SimpleBackoff(
Min: 100 * time.Millisecond,
Max: 60 * time.Second,
Factor: 2,
)
goback.Wait(b) // sleeps 100ms
goback.Wait(b) // sleeps 200ms
goback.Wait(b) // sleeps 400ms
fmt.Println(b.NextRun()) // prints 800ms
b.Reset() // resets the backoff
goback.Wait(b) // sleeps 100ms
}
Furter examples can be found in the examples folder in the repository.
Index ¶
Constants ¶
This section is empty.
Variables ¶
var ( // ErrMaxAttemptsExceeded indicates that the maximum retries has been // excedeed. Usually to consider a service unreachable/unavailable. ErrMaxAttemptsExceeded = errors.New("maximum of attempts exceeded") )
Functions ¶
func After ¶
After returns a channel that will be called after the time specified by the backoff strategy or will exit immediately with an error.
func GetNextDuration ¶
GetNextDuration returns the duration for the strategies considering the minimum and maximum durations, the factor of increase and the number of attemtps tried.
Types ¶
type Backoff ¶
type Backoff interface {
// NextAttempt returns the duration to wait for the next retry.
NextAttempt() (time.Duration, error)
// Reset clears the number of tries. Next call to NextAttempt will return
// the minimum backoff time (if there is no error).
Reset()
}
Backoff is the interface that any Backoff strategy needs to implement.
type JitterBackoff ¶
type JitterBackoff SimpleBackoff
JitterBackoff provides an strategy similar to SimpleBackoff but lightly randomises the duration to minimise collisions between contending clients.
func (*JitterBackoff) NextAttempt ¶
func (b *JitterBackoff) NextAttempt() (time.Duration, error)
NextAttempt returns the duration to wait for the next retry.
type SimpleBackoff ¶
type SimpleBackoff struct {
Attempts int
MaxAttempts int
Factor float64
Min time.Duration
Max time.Duration
}
SimpleBackoff provides a simple strategy to backoff.
func (*SimpleBackoff) NextAttempt ¶
func (b *SimpleBackoff) NextAttempt() (time.Duration, error)
NextAttempt returns the duration to wait for the next retry.
func (*SimpleBackoff) Reset ¶
func (b *SimpleBackoff) Reset()
Reset clears the number of tries. Next call to NextAttempt will return the minimum backoff time (if there is no error).