== Camel Example Spring Boot and ActiveMQ

This example shows how to work with a simple Apache Camel application using Spring Boot and Apache ActiveMQ.

=== Preparing ActiveMQ brokers

From Apache ActiveMQ you can download the broker as a `.zip` or `.tar.gz` file.

Unzip/tar the archive, and start a terminal.

Change directory to the unzipped directory and start the broker.

    bin/activemq console

Which runs the broker in the foreground and logs to the console.

=== How to run the example

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!
