Streaming Pool: reuse, combine and create reactive streams with pleasure
When connecting together heterogeneous and complex systems, it is not easy to exchange data between components. Streams of data are successfully used in industry in order to overcome this problem, especially in the case of “live” data. Streams are a specialization of the Observer design pattern and they provide asynchronous and non-blocking data flow.
The ongoing effort of the ReactiveX initiative is one example that demonstrates how demanding this technology is even for big companies. Bridging the discrepancies of different technologies with common interfaces is already done by the Reactive Streams initiative and, in the JVM world, via reactive-streams-jvm interfaces.
Streaming Pool is a framework for providing and discovering reactive streams. Through the mechanism of dependency injection provided by the Spring Framework, Streaming Pool provides a so called Discovery Service. This object can discover and chain streams of data that are technologically agnostic, through the use of Stream IDs. The stream to be discovered must be present in the Streaming Pool system (by providing it using the Providing Service) or it must be possible to create it (using one of the registered Stream Factories). In the latter case, the stream is lazily created on demand.
The application (client) that uses a stream does not need to know which is the source of the information, it may be a component of the application itself or a distributed system. In this way, it is possible to create truly decoupled systems that are resilient to changes and are easy to mock or test.
The talk will focus on the motivation, design choices and the features of Streaming Pool.