I definitely like the idea. Camel-rx is for RxJava 1.x which is not based on the reactive streams API (RxJava 2.x, however, is based on that API).
On 19 July 2017 at 06:51, Guillaume Nodet <gno...@apache.org> wrote: > At first glance, it looks similar related to http://camel.apache.org/rx. > html > Also, given what you say about Camel and OSGi Push Streams, I think it > would make more sense to discuss that inside the Camel project instead. > > 2017-07-19 13:02 GMT+02:00 Christian Schneider <ch...@die-schneider.net>: > > > > > Scope > > > > I recently experimented with reactive streams and built a small component > > framework on top of this spec. > > See https://github.com/cschneider/reactive-components > > > > The goal is to have a small API that can encapsulate a protocol and > > transport. The code using such a reactive component should not directly > > depend on the specifics of the transport or protocol. Another goal is to > > have reactive features like back pressure. Ultimately I am searching for > > something like Apache Camel Components but with a lot less coupling. In > > camel the big problem is that components depend on camel core which > > unfortunately is much more than a component API. So any camel component > is > > coupled quite tightly to all of camel core. > > > > > > Proposal > > > > I propose to donate my code to Apache and establish this as a Apache > Karaf > > sub project. Some people like Jean-Baptiste and Hadrian have already > > expressed that they support this and I hope for some more feedback and > help. > > > > I chose the Karaf project at the moment but am also open to placing this > > in another Apache project. Some matching projects would be Apache Camel, > > Aries or Felix. > > > > > > Component API > > > > I was trying to find the simplest API that would allow similar components > > to camel in one way mode. > > > > public interface RComponent { > > <T> Publisher<T> from(String destination, Class<T> type); > > <T> Subscriber<T> to(String destination, Class<T> type); > > } > > > > A component is a factory for Publishers and Subscribers. From and to have > > similar meaning as in camel. The component can be given a source / target > > type to produce / consume. So with the OSGi Converter spec this would > allow > > to have type safe messaging without coding the conversion in every > > component. Each component is exposed as a service which encapsulates most > > of the configuration. All endpoint specific configuration can be done > using > > the destination String. > > > > Publisher and Subscriber are interfaces from the reactive streams api ( > > http://www.reactive-streams.org/). So they are well defined and have > zero > > additional dependencies. > > > > I also considered to use OSGi push streams which is an OSGi spec and > would > > also be an interesting foundation. I decided against that though as push > > streams have no API that is separate from the DSL and will probably not > be > > used a lot outside of OSGi. > > > > See the examples for how to use this in practice. > > https://github.com/cschneider/reactive-components > > > > > > Possible use cases > > > > Two big use cases are reactive microservices that need messaging as well > > as plain camel like integrations. > > Another case are the Apache Karaf decanter collectors and appenders. > > Currently they use a decanter specific API but they could easily be > > converted into the more general rcomp api. > > We could also create a bridge to camel components to leverage the many > > existing camel components using the rcomp API as well as offering rcomp > > components to camel. > > > > Components alone are of course not enough. One big strength of Apache > > Camel is the DSL. In case of rcomp I propose to not create our own DSL > and > > instead use existing DSLs that work well in OSGi. Two examples: > > > > Akka and reactive streams > > https://de.slideshare.net/ktoso/reactive-integrations-with-akka-streams > > > > Reactor and reactive streams > > https://de.slideshare.net/StphaneMaldini/reactor-30-a-reacti > > ve-foundation-for-java-8-and-spring > > > > Another integration is with REST. It is already possible to integrate CXF > > Rest services with reactive streams using some adapters but we could have > > native integration. > > > > > > Risks and Opportunities > > > > The main risk I see is not gathering a critical mass of components to > draw > > more people. > > Another risk is that the RComponent API or the reactor streams have some > > unexpected limitations. > > The big opportunity I see is that the rcomp API is very simple so the > > barrier of entry is low. > > I also hope that this might become a new foundation for a simpler and > more > > modern Apache Camel. > > > > So this all depends on getting some support by you all. > > > > Christian > > > > > > -- > > Christian Schneider > > http://www.liquid-reality.de > > > > Open Source Architect > > http://www.talend.com > > > > > > > -- > ------------------------ > Guillaume Nodet > -- Matt Sicker <boa...@gmail.com>