== Reactive Streams - Spring Boot example

=== Abstract

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

=== Introduction

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. It reads from an "input" named directory, filtering files containing "camel" as text as criteria before sending to an external system
- **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

In some cases the camel reactor streams routes can be verified during execution of application, but we can also verify the functionality of reactor subscriptions through some defined Rest APIs.

Rest API to retrieve informations about orders:

http://localhost:8080/camel/orders/1
http://localhost:8080/camel/orders/2

If we call:

----
curl http://localhost:8080/camel/orders/3
----

We should receive a message "Not Found" as result of Flux Reactor coded behaviour

Rest API for reactor managed calculator:

----
curl http://localhost:8080/camel/sum/23/31
----

Let verify "54" as result

=== How to run on Openshift

Create your own project

    oc new-project csb-example-reactive-streams

So you can deploy and run with the command

    mvn clean package -Popenshift

You can call the Rest APIs such as

----
export ROUTE=$(oc get route camel-example-spring-boot-reactive-streams --output jsonpath={.spec.host})

curl http://${ROUTE}/camel/orders/1

curl http://${ROUTE}/camel/sum/23/31
----

An so on.

=== 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!
