I recently looked into ways to combine messaging and streaming on OSGi.
So the following is a bit OSGi specific regarding finding components but
I think this can also be done for non OSGi usage.
Interestingly the best reactive streams solution I found for my case was
Reactor (by Pivotal) which is the core of spring 5. It works out of the
box on OSGi and only has a single dependency.
The next thing was how to combine this with messaging in a loosely
coupled way. I really like Apache Camel but I think it is not up to date
any more and also acquired a lot of weight over time (especially in
camel-core). So I was looking into providing a light weight component
API and combine it with Reactor.
The result is this project:
https://github.com/cschneider/streaming-osgi/tree/master/reactortest
This is the Component API:
https://github.com/cschneider/streaming-osgi/blob/master/reactortest/src/main/java/component/api/MComponent.java
Actually I am unsure if the converter must be part of the API but this
is the current state.
I created some POC components for Mqtt, EventAdmin and Mail.
and finally two examples:
Listen on eventadmin topic, log and forward to other topic:
https://github.com/cschneider/streaming-osgi/blob/master/reactortest/src/main/java/reactortest/ExampleEventAdmin.java
Listen to mqtt, compute average over sliding window and forward to other
topic:
https://github.com/cschneider/streaming-osgi/blob/master/reactortest/src/main/java/reactortest/MqttExampleComponent.java
I think there is a lot of potential in Reactor and also in messaging
components that do not couple your code to the technology.
I would be happy about any feedback on the prototype. Beware the code is
not yet split into bundles but I hope the intention is still visible.
Best
Christian
--
Christian Schneider
http://www.liquid-reality.de
Open Source Architect
http://www.talend.com