| = HTTP with vanilla JAX-RS or with Camel `platform-http` component: A Camel Quarkus example |
| :cq-example-description: An example that shows how to create HTTP endpoints using either the RESTEasy |
| implementation of JAX-RS or using Camel `platform-http` component. |
| |
| {cq-description} |
| |
| The Quarkus REST service `ExampleResource.java` and the Camel route `CamelRoute.java` |
| are independent and are present in this example to demonstrate how you can build microservices |
| with both Quarkus and Camel separated. |
| |
| You can of course also combine Quarkus REST services with Camel (see further below). |
| |
| TIP: Check the https://camel.apache.org/camel-quarkus/latest/first-steps.html[Camel Quarkus User guide] for prerequisites |
| and other general information. |
| |
| This example was used in a 10 minute video recording to demonstrate |
| how to quickly run 100 Camels with Apache Camel, Quarkus and GraalVM: |
| |
| - https://www.youtube.com/watch?v=4lXSf8DBQkQ |
| |
| |
| == Start in the Development mode |
| |
| [source,shell] |
| ---- |
| $ mvn clean compile quarkus:dev |
| ---- |
| |
| The above command compiles the project, starts the application and lets the Quarkus tooling watch for changes in your |
| workspace. Any modifications in your project will automatically take effect in the running application. |
| |
| TIP: Please refer to the Development mode section of |
| https://camel.apache.org/camel-quarkus/latest/first-steps.html#_development_mode[Camel Quarkus User guide] for more details. |
| |
| From a web browser, you can call the two services via |
| |
| - http://localhost:8080/hello |
| - http://localhost:8080/camel/hello |
| |
| There is also health check and metrics available from the following urls: |
| |
| - http://localhost:8080/q/health |
| - http://localhost:8080/q/metrics |
| |
| === Package and run the application |
| |
| Once you are done with developing you may want to package and run the application. |
| |
| TIP: Find more details about the JVM mode and Native mode in the Package and run section of |
| https://camel.apache.org/camel-quarkus/latest/first-steps.html#_package_and_run_the_application[Camel Quarkus User guide] |
| |
| ==== JVM mode |
| |
| [source,shell] |
| ---- |
| $ mvn clean package |
| $ java -jar target/quarkus-app/quarkus-run.jar |
| ... |
| [io.quarkus] (main) camel-quarkus-examples-... started in 1.163s. Listening on: http://0.0.0.0:8080 |
| ---- |
| |
| ==== Native mode |
| |
| IMPORTANT: Native mode requires having GraalVM and other tools installed. Please check the Prerequisites section |
| of https://camel.apache.org/camel-quarkus/latest/first-steps.html#_prerequisites[Camel Quarkus User guide]. |
| |
| To prepare a native executable using GraalVM, run the following command: |
| |
| [source,shell] |
| ---- |
| $ mvn clean package -Pnative |
| $ ./target/*-runner |
| ... |
| [io.quarkus] (main) camel-quarkus-examples-... started in 0.013s. Listening on: http://0.0.0.0:8080 |
| ... |
| ---- |
| |
| == Using Camel from Quarkus JAX-RS |
| |
| The `ExampleResource.java` is a pure JAX-RS REST service without using Camel. |
| Suppose you wanted to add a HTTP POST that sends the HTTP body to a Kafka topic, |
| via the camel-kafka component. You can then integrate Quarkus |
| with Camel by dependency injecting Camels `FluentProducerTemplate` that allows to |
| send the message in one line of code to Kafka. What's left is to configure the URL to the Kafka brokers, |
| which can be done in the `application.properties` file. |
| |
| [source,java] |
| ---- |
| import org.apache.camel.FluentProducerTemplate; |
| import org.jboss.resteasy.annotations.Body; |
| import javax.inject.Inject; |
| import javax.ws.rs.Consumes; |
| |
| @Path("/hello") |
| public class ExampleResource { |
| |
| @Inject |
| FluentProducerTemplate producer; |
| |
| @GET |
| @Produces(MediaType.TEXT_PLAIN) |
| public String hello() { |
| return "hello"; |
| } |
| |
| @POST |
| @Consumes(MediaType.TEXT_PLAIN) |
| public void foo(@Body String payload) { |
| producer.to("kafka:foo").send(payload); |
| } |
| } |
| ---- |
| |
| == Feedback |
| |
| Please report bugs and propose improvements via https://github.com/apache/camel-quarkus/issues[GitHub issues of Camel Quarkus] project. |