In camel there is now a camel-reactive-streams component that bridges
camel and reactive-streams specs so the integration with the proposed
subproject should be easy.
There is also a camel-reactor and - I hope soon - a camel-rxjava2
component to provide an implementation of the camel-reactive-streams
api based on reactor or rxjava2.

Maybe we could have a new "camel-rcomp" component to ease the integration.


---
Luca Burgazzoli


On Thu, Aug 3, 2017 at 8:02 AM, Jean-Baptiste Onofré <j...@nanthrax.net> wrote:
> Hi Christian,
>
> the proposal is interesting, and I see a first potential use in Decanter for
> sure.
>
> The comment about Camel is fair as it looks very similar at first glance.
>
> However, the scope is slightly different IMHO.
>
> I checked about the legal. The code should be cleanup for donation (ASF
> headers, package names, ...). About the dependency license, for the
> reactive-streams, it' OK as it uses Creative Commons Zero into the Public
> Domain. And Reactor is already under Apache license.
>
> The DSL is a hot topic. I understand that leveraging Akka or Reactor is
> easier, but I'm a bit concern that we could be too much "coupled".
> Maybe our own simple DSL could help. Thoughts ?
>
> Thanks anyway !
> Regards
> JB
>
>
> On 07/19/2017 01:02 PM, Christian Schneider wrote:
>>
>>
>>       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-reactive-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
>>
>>
>
> --
> Jean-Baptiste Onofré
> jbono...@apache.org
> http://blog.nanthrax.net
> Talend - http://www.talend.com

Reply via email to