An enhanced HTTP client for Go with built-in retry mechanisms, circuit breaking, and plugin support for fault-tolerant requests.
Heimdall is an enhanced HTTP client library for Go that provides built-in fault-tolerance features like retry mechanisms and circuit breaking. It helps applications handle HTTP requests more reliably at scale by automatically retrying failed requests and preventing cascading failures through circuit breaker patterns.
Go developers building distributed systems, microservices, or any application that makes HTTP requests to external services and needs improved reliability and fault tolerance.
Developers choose Heimdall because it provides production-ready fault-tolerance features out of the box with an idiomatic Go interface, eliminating the need to manually implement retry logic and circuit breaking while maintaining compatibility with the standard library's HTTP client.
An enhanced HTTP client for Go
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Provides Hystrix-like circuit breaking with configurable parameters such as error thresholds and timeouts, preventing cascading failures in distributed systems, as shown in the example with fallback functions.
Supports constant, exponential, and custom backoff algorithms via the Backoff interface, allowing developers to implement tailored retry logic, demonstrated with linear backoff examples in the README.
Maintains idiomatic Go interface with fluent HTTP methods and full compatibility with http.Client's Do method, making it easy to integrate into existing codebases without major changes.
Enables hooking into request lifecycle events through plugins, such as the request logger plugin, allowing for custom logging, monitoring, or middleware-like functionality.
Retries are performed synchronously in-memory, which can block goroutines and may not scale well for extremely high-concurrency applications compared to asynchronous solutions, as admitted in the README's feature description.
Requires careful setup of separate hystrix and HTTP timeouts, which the README notes can be confusing and error-prone if not aligned properly, adding cognitive overhead for developers.
Circuit breaker metrics export is primarily tied to StatsD via WithStatsDCollector, lacking out-of-the-box support for other monitoring systems like Prometheus without custom plugin development.