| = Walk through an Example Code |
| |
| This mini-guide takes you through the source code of a |
| https://github.com/apache/camel-examples/blob/master/examples/camel-example-jms-file/src/main/java/org/apache/camel/example/jmstofile/CamelJmsToFileExample.java[simple |
| example]. |
| |
| Camel can be configured either by using xref:spring.adoc[Spring] or |
| directly in Java - which |
| https://github.com/apache/camel-examples/blob/master/examples/camel-example-jms-file/src/main/java/org/apache/camel/example/jmstofile/CamelJmsToFileExample.java[this |
| example does]. |
| |
| We start with creating a xref:camelcontext.adoc[CamelContext] - which is |
| a container for xref:components::index.adoc[Components], |
| xref:routes.adoc[Routes] |
| etc: |
| |
| [source,java] |
| ---- |
| 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 |
| xref:components::file-component.adoc[FileComponent]: |
| |
| [source,java] |
| ---- |
| 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: |
| |
| [source,java] |
| ---- |
| 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: |
| [source,xml] |
| ------------------------------------------------------------ |
| <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: |
| [source,java] |
| ---- |
| 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. If we know we are using |
| xref:components::activemq-component.adoc[ActiveMQ] we can use an even simpler form using the |
| http://activemq.apache.org/maven/5.5.0/activemq-camel/apidocs/org/apache/activemq/camel/component/ActiveMQComponent.html#activeMQComponent%28java.lang.String%29[`activeMQComponent()` |
| method] while specifying the |
| http://activemq.apache.org/configuring-transports.html[brokerURL] used |
| to connect to ActiveMQ |
| |
| In normal use, an external system would be firing messages or events |
| directly into Camel through one if its xref:components::index.adoc[Components] |
| but we are going to use tha xref:producertemplate.adoc[ProducerTemplate] |
| which is a really easy way for testing your |
| configuration: |
| |
| [source,java] |
| ---- |
| ProducerTemplate template = context.createProducerTemplate(); |
| ---- |
| |
| Next you *must* start the camel context. If you are using |
| xref:spring.adoc[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 |
| |
| [source,java] |
| ---- |
| camelContext.start(); |
| ---- |
| |
| This will start all of the configured routing rules. |
| |
| So after starting the xref:camelcontext.adoc[CamelContext], we can fire |
| some objects into |
| camel: |
| |
| [source,java] |
| ---- |
| for (int i = 0; i < 10; i++) { |
| template.sendBody("test-jms:queue:test.queue", "Test Message: " + i); |
| } |
| ---- |
| |
| == What happens? |
| |
| From the |
| xref:producertemplate.adoc[ProducerTemplate] |
| - we send objects (in this case text) into the |
| xref:camelcontext.adoc[CamelContext] to the Component |
| _test-jms:queue:test.queue_. These text objects will be |
| xref:type-converter.adoc[converted automatically] into JMS Messages and |
| posted to a JMS Queue named _test.queue_. When we set up the |
| xref:routes.adoc[Route], we configured the |
| xref:components::file-component.adoc[FileComponent] to listen off the _test.queue_. |
| |
| The File xref:components::file-component.adoc[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 xref:routes.adoc[Route] - |
| to take notifications from the xref:components::file-component.adoc[FileComponent] and print |
| them out as text. |
| |
| *That's it!* |
| |
| If you have the time then use 5 more minutes to |
| xref:walk-through-another-example.adoc[Walk through another example] |
| that demonstrates the Spring DSL (XML based) routing. |