= Health: A Camel Quarkus example
:cq-example-description: An example that shows how to use Camel health-checks with Quarkus.

{cq-description} It also shows how you can build custom health-checks and have them automatic discovered by Camel and
used as parts of its health-check system.

TIP: Check the https://camel.apache.org/camel-quarkus/latest/first-steps.html[Camel Quarkus User guide] for prerequisites
and other general information.

The example has two routes. The timer route performs a given task at regular interval. For the sake of this example we'll say
that this task unexpectedly freezes the service from time to time. The details can be consulted at http://localhost:8080/health.
The custom health check is expected to report UNKNOWN on first consultation, then UP during 10 seconds, and finally DOWN so as to
simulate that the service is frozen.

The 2nd route is on purpose made to fail on startup by configuring netty to an unknown host.
Camel supervising route controller will attempt to restart the route up till 10 times before exhausting.
The routes health check will therefore report this route as DOWN until its exhausted where the states are changed to UNKNOWN.

The details can be seen at runtime via the following url from a web browser: http://localhost:8080/health.

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

You can check the health check status by calling the following url from a web browser: http://localhost:8080/health

=== 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/*-runner.jar
...
[io.quarkus] (main) camel-quarkus-examples-... started in 0.885s. 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.026s. Listening on: http://0.0.0.0:8080
...
----

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

