Hi Lari, Thanks for initiating this proposal.
Apache pulsar is one of the reliable messaging system as we have made a study in one of my previous project. But still there is lack of support for reactive streaming which forced us to move with other alternative system. I have setup https://github.com/lhotari/reactive-pulsar module and explored APIs & tests, this gives me strong hope to bring such a reactive streaming feature in Pulsar. I would like to contribute to this development. Thanks Surendheran Kannan On 2021/09/01 11:30:37, Lari Hotari <lhot...@apache.org> wrote: > Dear Apache Pulsar community members, > > I have developed a Reactive Streams adapter for the Apache Pulsar Java > Client. It uses Project Reactor as the Reactive Streams implementation. > > The repository is here: https://github.com/lhotari/reactive-pulsar > and library is available in Maven Central: > https://search.maven.org/search?q=g:com.github.lhotari%20a:reactive-pulsar* > > I would like to contribute this library to the Apache Pulsar project. > I would suggest that the library is committed to a separate repository, for > example https://github.com/apache/pulsar-reactive . > > # Motivation > > There's a need to "go reactive from end-to-end" when building modern > reactive applications with platforms such as Spring Reactive. > > There are ways to adapt the Apache Pulsar Java client async API calls to > Reactive Streams with a few lines of code. However, a lot will be missing > and achieving the complete solution will require much more effort. > > The primary goal of this library is to provide a Reactive Streams adapter > that wraps the Apache Pulsar Java client with Reactive APIs > for sending, reading and consuming messages. > The secondary goal is to provide a Spring Boot starter for easily adopting > the power of Apache Pulsar for Spring Boot applications. > > It is currently out of scope for this library to build a reactive client > all the way from the binary protocol handling. > This library builds upon the existing Apache Pulsar Java client and uses > the async API for operations. > > # Features > > - Simple and intuitive reactive APIs for sending, reading and consuming > messages. > - Non-blocking backpressure support for the provided reactive APIs > - Pulsar client resource lifecycle management that integrates with the > Reactive programming model > - Additional producer caching that caches producers. > - Useful for API backends since the Pulsar client producer resource can > be shared and cached across multiple REST calls. > - Support for in-order parallel (concurrent) processing at the application > level > - I/O intensive message processing can leverage Project Reactor's > capabilities to efficiently > handle thousands of simultaneous I/O calls to external REST APIs and > resources that have Reactive clients/drivers. > - In-order parallel processing support can retain key-order at the level > of a single consumer. > > I'm presenting the library and it's features tomorrow on September 2nd in > the SpringOne virtual conference, which is free to attend. > The session details and schedule are at > https://springone.io/2021/sessions/reactive-applications-with-apache-pulsar-and-spring-boot > . > > # Licenses > > The Reactive Pulsar Adapter library is under the Apache Licence Version 2.0 > . The main dependencies are reactor-core > (https://github.com/reactor/reactor-core) and jctools-core ( > https://github.com/JCTools/JCTools) which are also > ASL 2.0 licensed. > There's also a dependency to Caffeine (https://github.com/ben-manes/caffeine) > and the Spring Boot Starter > depends on Spring Boot and Spring Framework. These are all ASL 2.0 licensed > libraries. > The additional Spring integration testing support library depends on > Testcontainers, which is also ASL 2.0 licensed. > > > I'm looking forward to the discussion about this. > > > Best regards, > > Lari Hotari >