This article appeared originally on Jaxenter.com.
The first stable drop from Reactive Streams has landed, with version 1.0.0 available for immediate use. All the time spent discussing, debating, programming and testing has led to an asynchronous stream solution for “back pressure”.
The team behind the Reactive Streams Special Interest Group has announced the release of Reactive Streams 1.0, which has culminated in the realisation of the project’s initial goal: to provide a standard for asynchronous stream processing with non-blocking back pressure.
The stable version of their API was released as a standard and specification for Stream-oriented libraries for the JVM on top of the Technology Compatibility Kit (TCK). As part of the project’s goals, Reactive Streams aims to “govern the exchange of stream data across an asynchronous boundary while ensuring that the receiving side is not forced to buffer arbitrary amounts of data”. This is achieved by creating many conforming implementations that work in sync to achieve interoperability.
Documentation and implementation
The team have left out end-user DSLs and protocol binding APIs in order to encourage and enable different implementations that could utilise an array of programming languages. This also allows each implementation to stay as true as possible to the idioms of their platform.
The roll call of supported implementations listed for Reactive Streams 1.0 is impressive:
- Akka Streams (version
1.0-RC2) – See documentation here
- MongoDB (version
1.0.0) – See documentation here
- Ratpack (version
0.9.16) – See “Streams” chapter of the manual
- Reactive Rabbit (version
1.0.0) – Driver for RabbitMQ/AMQP, see here
- Reactor (version
2.0.1.RELEASE) – See documentation here
- RxJava (version
1.0.0) – See github.com/ReactiveX/RxJavaReactiveStreams
- Slick (version
3.0.0) – See “Streaming” section of the manual
- Vert.x 3.0 (version
milestone-5a) – Vert.x 3.0 is currently in beta. The Reactive Streams implementation can be found here
The specification documentation explains in detail the four API components required, as well as examples of asynchronous vs synchronous processing. The team believes that the 1.0 drop is the solution to the problem that they set out to solve and will be lead to further adoption and integration:
We anticipate that acceptance of this Reactive Streams specification and experience with its implementations will together lead to wide integration, for example including Java platform support in future JDK releases or network protocol support in future web browsers.
Reactive Streams 1.0 is a collaboration between engineers from Netflix, Pivotal, RedHat, Twitter, Typesafe and others and is available as open source.