== Camel Example Reactive Streams

This example shows some possible usages of the Camel reactive streams component.

The following sample routes are started together in a spring-boot application (all routes use `reactor-core` as external reactive framework):

- **examples.basic.camel-to-reactor**: shows how data generated by Camel route can be consumed by a reactive application.
- **examples.basic.camel-to-reactor-in-out**: shows how Camel data can be processed by a reactive library and return back to Camel to complete the flow.
- **examples.basic.reactor-to-camel**: shows how data generated by a reactive application can be consumed by a Camel route.
- **examples.basic.reactor-to-camel-in-out**: shows how data generated by a reactive application can can be processed by Camel and return back to the library to complete the flow.
- **examples.client-api.rest**: shows how a rest service can be defined using the reactive streams client API only.
- **examples.client-api.workflow**: shows how multiple Camel endpoints can be used into a reactive streams processing flow.
- **examples.others.rest**: shows how `Publisher` classes can be used as parameters or return types in beans.

All routes are enabled by default, but they can be switched off by changing the `src/main/resources/application.yml` file.
Each route is contained in a separate Java class.

=== How to run

You can run this example using

    mvn spring-boot:run

=== Help and contributions

If you hit any problem using Camel or have some feedback, then please
https://camel.apache.org/support.html[let us know].

We also love contributors, so
https://camel.apache.org/contributing.html[get involved] :-)

The Camel riders!
