An advanced interruptible Go library for performing actions repetitively until successful, with context integration and backoff strategies.
Retry is a Go library that provides an advanced interruptible mechanism to perform actions repetitively until they succeed. It solves the problem of unreliable network communications in distributed systems by offering configurable retry strategies with support for cancellation via Go contexts. The library helps developers handle transient failures gracefully without writing boilerplate retry logic.
Go developers building distributed systems, microservices, or network-dependent applications that require robust fault tolerance and retry capabilities.
Developers choose Retry for its seamless integration with Go's context package, flexible strategy configuration (including backoff and jitter), and focus on interruptibility, making it more reliable and easier to control than basic retry implementations.
♻️ The most advanced interruptible mechanism to perform actions repetitively until successful.
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Actions can be canceled mid-execution using Go's context package, preventing infinite loops and enabling graceful shutdowns, as demonstrated in the README example with context.WithTimeout.
Supports configurable limits, backoff algorithms like Fibonacci, and jitter for distributed systems, reducing thundering herd problems through customizable retry behavior.
Built to work seamlessly with Go's context package for timeout and cancellation propagation, making it idiomatic for Go applications and enhancing control over retry operations.
Designed to integrate with breaker patterns for fault tolerance, as mentioned in the philosophy, though integration requires manual setup with packages like breaker.
The 'How to' section is marked as 'rewriting...', indicating gaps or outdated usage guides that can hinder quick adoption and implementation.
Major releases are not backward-compatible per SemVer, requiring careful version management and potential code refactoring for upgrades, as noted in the Integration section.
Configuring advanced strategies with backoff and jitter involves multiple components and dependencies, adding complexity compared to simpler retry libraries.