Skip to content

kamilsk/retry

Folders and files

NameName
Last commit message
Last commit date

Latest commit

0f199af · Feb 23, 2021
Dec 18, 2020
Feb 23, 2021
Dec 18, 2020
Feb 23, 2021
Feb 23, 2021
Oct 29, 2020
Feb 23, 2020
Dec 24, 2020
Dec 24, 2020
Oct 29, 2020
Feb 22, 2021
Dec 18, 2020
Feb 22, 2021
Feb 22, 2021
Feb 23, 2021
Feb 23, 2021
Feb 23, 2021
Feb 24, 2020
Feb 23, 2021
Feb 22, 2021

Repository files navigation

♻️ retry Awesome Go

The most advanced interruptible mechanism to perform actions repetitively until successful.

Build Documentation Quality Template Coverage Mirror

💡 Idea

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.

🏆 Motivation

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.

🤼‍♂️ How to

rewriting...

🧩 Integration

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

🤲 Outcomes

Console tool to execute commands until successful

...

See more details here.

made with ❤️ for everyone