For flow control patterns, the strongest matches are app-vnext/polly (Polly is a robust), jd/tenacity (Tenacity is a Python retry library that provides robust) and resilience4j/resilience4j (Resilience4j is a fault tolerance and flow control library). jhalterman/failsafe and alibaba/sentinel round out the shortlist. Each is ranked by relevance to your query, popularity and recent activity.
Explore top open-source flow control libraries for concurrency, rate limiting, and retries. Compare GitHub stars, activity, and features to find the right…
Polly is a resilience and transient-fault-handling library for .NET applications. It provides a framework for defining and executing stability patterns that manage failures and resource exhaustion during operation execution. The library enables developers to compose complex resilience strategies through a fluent builder pattern, wrapping target operations in functional decorators. These policies intercept execution flow to apply automated recovery mechanisms, such as retries for temporary errors or circuit breakers that isolate unstable components by blocking requests. The framework supports
Polly is a robust .NET resilience and transient-fault-handling library that implements retries, circuit breaking, rate limiting, and timeout strategies using a fluent builder pattern.
Tenacity is a Python retry library and fault tolerance framework designed to automatically re-execute failing functions based on custom conditions, wait intervals, and stop criteria. It provides a mechanism to apply retry logic to both synchronous functions and asynchronous coroutines. The library implements exponential backoff to increase delays between retries, helping to manage transient network failures and prevent the overloading of services. Its capabilities cover the definition of retry conditions based on exception types or return values, as well as the enforcement of duration limits
Tenacity is a Python retry library that provides robust automatic retry mechanisms, exponential backoff, and asynchronous coroutine support, though it focuses specifically on retries rather than general rate limiting or full backpressure handling.
Resilience4j is a fault tolerance library for Java 8 applications designed to handle failures in distributed systems. It provides a comprehensive suite of resilience patterns including resource isolation, request throttling, retries, and timeouts. The project implements specific stability mechanisms such as circuit breakers to prevent cascading failures, bulkheads for system resource isolation, and rate limiters to cap execution rates. It also includes a retry framework with backoff policies and timeout enforcement to manage transient faults and maximum execution durations. Additional capabi
Resilience4j is a fault tolerance and flow control library for Java that provides circuit breaking, rate limiting, retries, bulkheads, and concurrency control to manage failures in distributed systems.
Failsafe is a JVM resilience library providing a collection of fault tolerance patterns for Java applications. It functions as an asynchronous execution wrapper that runs tasks in the background and returns futures to prevent thread blocking. The library allows for the composition of resilience policies, enabling multiple patterns to be stacked into a sequential pipeline. It includes specific implementations for circuit breaking to prevent system overload, rate limiting to control traffic flow, and a framework for managing retries and fallbacks. Capability areas cover traffic management thro
Failsafe is a Java resilience library that provides robust fault tolerance patterns including rate limiting, circuit breaking, retries, and asynchronous execution support, making it an ideal fit for managing concurrency and flow control.
Sentinel is a microservice flow control framework designed for managing traffic limits, distributed circuit breaking, and adaptive overload protection. It serves as a traffic shaping component that defines resource boundaries to regulate request flow and ensure reliability across distributed systems. The project provides a real-time monitoring dashboard for tracking resource metrics and performance bottlenecks across service clusters. It includes a visual interface for the real-time management of flow control and circuit breaking rules, allowing parameters to be updated without restarting the
Sentinel is a Java-based flow control framework that provides traffic shaping, distributed circuit breaking, and overload protection to manage concurrency and reliability in distributed systems.
RxJava is a reactive stream processing framework and JVM reactive extensions library. It serves as an asynchronous dataflow orchestrator used to compose event-based programs by transforming, combining, and consuming real-time data flows on the Java Virtual Machine. The project distinguishes itself through integrated backpressure flow control, which manages the emission rate between producers and consumers to prevent memory exhaustion. It further provides mechanisms for concurrent thread management and parallel data processing to offload blocking operations and maintain application responsiven
RxJava is a comprehensive reactive streams framework for the JVM that natively supports backpressure, asynchronous dataflow orchestration, and concurrent thread management.
Reactor Core is a reactive programming toolkit and non-blocking foundation for composing asynchronous data pipelines on the JVM. It serves as an asynchronous stream processing framework and a backpressure management system, allowing developers to transform, filter, and combine sequences of events while regulating data flow between producers and consumers to prevent resource exhaustion. The library differentiates itself through a sophisticated concurrency scheduling system and demand-based flow control. It decouples signal processing from specific threads using a scheduler registry and provide
Reactor Core is a reactive programming toolkit and non-blocking foundation for the JVM that explicitly provides backpressure handling, concurrency control, and async stream processing to manage data flow between producers and consumers.
Async is a JavaScript asynchronous flow library designed to manage the execution and coordination of asynchronous tasks in Node.js and the browser. It provides functional utilities to wrap, process, and orchestrate complex asynchronous workflows. The library distinguishes itself through a comprehensive task orchestrator that handles dependency graphs to resolve circular references and manages concurrent task queues. It includes a unification bridge that allows callback-style and promise-based functions to operate within the same execution interface. The project covers several primary capabil
This JavaScript library provides asynchronous flow control utilities to orchestrate tasks, manage concurrent queues, and implement retry policies, fitting the core concurrency and flow management requirements despite missing explicit backpressure and circuit breaking features.
Tokio is an asynchronous runtime for the Rust programming language, designed to manage and execute concurrent tasks efficiently. It provides a multi-threaded execution environment that schedules lightweight tasks across available processor cores, utilizing a work-stealing scheduler to balance computational load. By employing a poll-based execution model and waker-based notifications, the runtime drives asynchronous operations forward without requiring active polling loops, ensuring efficient resource utilization. The project distinguishes itself through a comprehensive suite of tools for high
Tokio is an asynchronous runtime and concurrency framework for Rust that provides foundational primitives, task scheduling, and synchronization patterns needed to build robust, high-performance flow-controlled systems.
RxGo is a functional reactive programming library and an implementation of ReactiveX for the Go language. It serves as an asynchronous stream processing toolkit designed to coordinate event-based programs and data flows using the observable pattern. The library enables the construction of asynchronous processing pipelines that transform, filter, and combine event sequences. It distinguishes itself through the use of functional operators to compose these pipelines and provides mechanisms for managing concurrent execution. The toolkit covers a broad range of stream orchestration capabilities,
RxGo is a functional reactive programming library for Go that provides asynchronous stream processing, concurrency control, and backpressure management, though it lacks dedicated circuit-breaking and retry primitives out of the box.
BullMQ is a Redis-backed message queue library and background processor designed for distributed task queueing. It functions as a distributed queue manager and task scheduler, utilizing Redis to manage asynchronous job processing and persistence. The system distinguishes itself through its role as a job workflow orchestrator, enabling the definition of complex parent-child job dependencies and hierarchies for multi-step workflows. It provides sandboxed process execution to isolate heavy workloads and prevent event loop blocking, alongside distributed rate limiting to protect downstream servic
BullMQ is a Redis-backed message queue library for Node.js and other languages that provides built-in rate limiting, retry policies, and background job concurrency control, making it a strong tool for managing task flow despite lacking explicit circuit breaking and reactive backpressure streams.
Inngest is a durable execution framework and event-driven automation engine designed to orchestrate background workflows. It enables developers to build resilient, stateful processes by memoizing function steps, ensuring that long-running tasks can automatically resume from the last successful operation after failures, timeouts, or infrastructure restarts. The platform distinguishes itself through its event-driven architecture, which uses a schema-validated bus to trigger functions and coordinate complex, multi-step logic. It employs an onion-model middleware approach for cross-cutting concer
Inngest provides a durable execution framework that handles retries, stateful processes, and resilient workflows, fitting the concurrency and flow control category well despite focusing primarily on background automation rather than raw rate limiting.
RxSwift is a reactive programming library for Swift that provides a framework for managing push-based data flows and composing asynchronous, event-based programs. It utilizes observable sequences and functional operators to transform and filter asynchronous sequences through a declarative approach. The library is distinguished by its ability to link asynchronous data streams directly to user interface elements, automating view updates via reactive data binding. It includes specialized tools for tracking UI control properties and events on the main thread, as well as the ability to encapsulate
RxSwift provides a reactive programming framework for Swift that handles asynchronous data flows and event composition, supporting core flow control needs like throttling and execution scheduling.
RxKotlin is a reactive programming library and asynchronous stream processor that provides Kotlin language extensions for composing event-based data streams. It serves as a set of Kotlin bindings for RxJava, allowing developers to transform, filter, and flatten sequences of data emitted over time. The library focuses on integrating RxJava patterns into Kotlin projects by applying language-specific conventions and idioms. It utilizes extension functions to simplify reactive programming patterns, reduce boilerplate, and optimize workflows within the reactive ecosystem. The toolkit covers a bro
RxKotlin provides reactive programming and asynchronous stream processing tools well-suited for managing complex data flows and asynchronous workflows, though it lacks direct out-of-the-box implementations for circuit breaking or formal rate limiting.
RxPY is a functional reactive programming library and a ReactiveX observable library for Python. It serves as an asynchronous stream processor and event-driven coordination framework used to build data pipelines that react to changes in state or streams of events over time. The library provides a toolkit for composing asynchronous and event-based programs using observable sequences and operators. It distinguishes itself through the use of configurable schedulers to manage concurrency, timing, and subscription lifecycles. The project covers a wide range of stream processing capabilities, incl
RxPY is a Python reactive programming library that manages asynchronous streams, event coordination, and concurrency schedulers, though it requires custom implementation for specific rate-limiting or circuit-breaking patterns.
Reactive extensions for PHP
This ReactiveX implementation for PHP provides asynchronous programming support and reactive stream primitives suited for managing concurrency and flow control, though it lacks dedicated out-of-the-box implementations for circuit breaking or advanced backpressure handling.
Node-rate-limiter is a utility library for Node.js designed to throttle both incoming and outgoing traffic using configurable time intervals and token bucket limits. It protects server capacity and backend APIs by capping the number of requests an individual client can make within a specified time window, while also controlling the frequency of outbound API calls and web crawling tasks to avoid triggering remote rate limit violations. The library implements a token-bucket rate limiting algorithm with continuous replenishment, allowing administrators to configure specific burst and drip rates.
This TypeScript library provides generic rate-limiting functionality for Node.js, fulfilling the rate-limiting requirement while lacking the broader orchestration features of a complete concurrency and flow-control framework.
Retry-go is a utility library for Go that automates the re-execution of failing code blocks and operations until they succeed or exhaust configured attempt limits. It provides mechanisms for handling transient failures, capturing both computed results and final errors from repeatedly executed functions. The library supports configurable retry timing through fixed intervals, exponential backoff strategies, and randomized jitter to control recovery speed and prevent overwhelming recovering services. It also includes error filtering rules that trigger retries on specific error conditions while h
This Go library provides retry mechanisms for handling transient failures, matching the retry feature of the flow control and concurrency category while lacking the other broader flow control capabilities.
Spring Retry is a Java library that provides exception handling, automated operation reattempts, backoff strategies, and recovery mechanisms for application workflows. It handles transient operation failures through declarative annotations, programmatic templates, stateful context storage, and fallback recovery paths. The library controls retry behavior by specifying attempt counts, timeouts, and inclusion or exclusion rules for specific exception types. It pauses execution between attempts using fixed, exponential, or randomized backoff intervals, and caches retry state outside the call stac
This library provides declarative and imperative retry support for Java applications, fitting the concurrency and flow control domain, though it focuses specifically on retries rather than the full suite of rate limiting and backpressure features.
Computational parallel flows on top of GenStage
Flow is an Elixir library built on GenStage for managing computational parallel flows, offering strong primitives for concurrency and data processing pipelines.
Taskflow is a C++ task-parallel framework designed to build high-performance parallel workflows and complex dependency graphs. It provides a programming model that organizes computational work into directed acyclic graphs, enabling developers to manage concurrency, resource scheduling, and task dependencies across multi-core CPUs and GPU accelerators. The framework distinguishes itself through its ability to orchestrate heterogeneous systems, allowing for the integration of hardware-accelerated kernels and memory operations into unified execution pipelines. It supports dynamic runtime subflow
Taskflow is a C++ parallel framework that helps you manage concurrency and task dependencies in high-performance workflows, though it lacks dedicated features for rate limiting, circuit breaking, and backpressure handling.
| Dépôt | Stars | Langage | Licence | Dernier push |
|---|---|---|---|---|
| app-vnext/polly | 14.2K | C# | BSD-3-Clause | |
| jd/tenacity | 8.4K | Python | apache-2.0 | |
| resilience4j/resilience4j | 10.7K | Java | Apache-2.0 | |
| jhalterman/failsafe | 4.3K | Java | Apache-2.0 | |
| alibaba/sentinel | 23.1K | Java | Apache-2.0 | |
| reactivex/rxjava | 48.2K | Java | Apache-2.0 | |
| reactor/reactor-core | 5.2K | Java | Apache-2.0 | |
| caolan/async | 28.2K | JavaScript | MIT | |
| tokio-rs/tokio | 32.3K | Rust | MIT | |
| reactivex/rxgo | 5.1K | Go | MIT |