Reactive streams (http://www.reactive-streams.org/) define a standard for asynchronous stream processing with non-blocking back pressure. The biggest problem with these kinds of systems is resource consumption. A fast producer can overload a slower consumer. The queue of data between those components can increase its size in excess and affects the behavior of the whole system. The back pressure mechanism ensures that the queue which mediates between the producer and a consumer has a limited number of elements.
Reactive streams define a minimal set of interfaces, methods, and protocols that describe the necessary operations and entities. They are based on the following three elements:
- A publisher of information
- One or more subscribers of that information
- A subscription between the publisher and a consumer
The reactive streams specification determines how these classes should interact between them, according to the following rules: