Walk through an Example Code
This mini-guide takes you through the source code of a simple example.
Camel can be configured either by using Spring or directly in Java - which this example does.
We start with creating a CamelContext - which is a container for Components, Routes etc:
CamelContext context = new DefaultCamelContext();
There is more than one way of adding a Component to the CamelContext. You can add components implicitly - when we set up the routing - as we do here for the FileComponent:
context.addRoutes(new RouteBuilder() {
public void configure() {
from("test-jms:queue:test.queue").to("file://test");
}
});
or explicitly - as we do here when we add the JMS Component:
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("vm://localhost?broker.persistent=false");
// Note we can explicit name the component
context.addComponent("test-jms", JmsComponent.jmsComponentAutoAcknowledge(connectionFactory));
or explicitly using the Component DSL which allows you to configure the components using DSL APIs and register them to the camel context. First you will have the import the maven package for the Component DSL:
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-componentdsl</artifactId>
<version>x.x.x</version>
<!-- use the same version as your Camel core version -->
</dependency>
and the register the component like this:
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("vm://localhost?broker.persistent=false");
ComponentsBuilderFactory.jms()
.connectionFactory(connectionFactory)
.acknowledgementMode(1)
.register(context, "test-jms");
The above works with any JMS provider.
In normal use, an external system would be firing messages or events directly into Camel through one of its Components but we are going to use tha ProducerTemplate which is a really easy way for testing your configuration:
ProducerTemplate template = context.createProducerTemplate();
Next you must start the camel context. If you are using Spring to configure the camel context this is automatically done for you; though if you are using a pure Java approach then you just need to call the start() method
camelContext.start();
This will start all of the configured routing rules.
So after starting the CamelContext, we can fire some objects into camel:
for (int i = 0; i < 10; i++) {
template.sendBody("test-jms:queue:test.queue", "Test Message: " + i);
}
What happens?
From the ProducerTemplate - we send objects (in this case text) into the CamelContext to the Component test-jms:queue:test.queue. These text objects will be converted automatically into JMS Messages and posted to a JMS Queue named test.queue. When we set up the Route, we configured the FileComponent to listen off the test.queue.
The File FileComponent will take messages off the Queue, and save them to a directory named test. Every message will be saved in a file that corresponds to its destination and message id.
Finally, we configured our own listener in the Route - to take notifications from the FileComponent and print them out as text.
That’s it!
If you have the time then use 5 more minutes to Walk through another example that demonstrates the Spring DSL (XML based) routing.