The most advanced interruptible mechanism to perform actions repetitively until successful.
The retry based on Rican7/retry but fully reworked and focused on integration with the 🚧 breaker and the built-in context package.
ctx, cancel := context.WithTimeout(context.Background(), time.Minute)
defer cancel()
action := func(ctx context.Context) (err error) {
req := req.Clone(ctx)
resp, err = http.DefaultClient.Do(req)
return err
}
how := []retry.How{
strategy.Limit(5),
strategy.BackoffWithJitter(
backoff.Fibonacci(10*time.Millisecond),
jitter.NormalDistribution(
rand.New(rand.NewSource(time.Now().UnixNano())),
0.25,
),
),
}
if err := retry.Do(ctx, action, how...); err != nil {
log.Fatal(err)
}
A full description of the idea is available here.
I developed distributed systems at Lazada, and later at Avito, which communicate with each other through a network, and I need a package to make these communications more reliable.
rewriting...
The library uses SemVer for versioning, and it is not BC-safe through major releases. You can use go modules to manage its version.
$ go get github.com/kamilsk/retry/v5@latest
...
See more details here.
made with ❤️ for everyone