ActiveMQ ComponentThe ActiveMQ component allows messages to be sent to a JMS This component is based on the JMS Component and uses Spring's JMS support for declarative transactions, using Spring's JmsTemplate for sending and a MessageListenerContainer for consuming. All the options from the JMS component also applies for this component. To use this component make sure you have the activemq.jar or activemq-core.jar on your classpath along with any Camel dependencies such as camel-core.jar, camel-spring.jar and camel-jms.jar. URI formatactivemq:[queue:|topic:]destinationName Where destinationName is an ActiveMQ queue or topic name. By default, the destinationName is interpreted as a queue name. For example, to connect to the queue, FOO.BAR, use: activemq:FOO.BAR You can include the optional queue: prefix, if you prefer: activemq:queue:FOO.BAR To connect to a topic, you must include the topic: prefix. For example, to connect to the topic, Stocks.Prices, use: activemq:topic:Stocks.Prices OptionsSee Options on the JMS component as all these options also apply for this component. Configuring the Connection FactoryThe following test case camelContext.addComponent("activemq", activeMQComponent("vm://localhost?broker.persistent=false")); Configuring the Connection Factory using Spring XMLYou can configure the ActiveMQ broker URL on the ActiveMQComponent as follows <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd"> <camelContext xmlns="http://camel.apache.org/schema/spring"> </camelContext> <bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent"> <property name="brokerURL" value="tcp://somehost:61616"/> </bean> </beans> Using connection poolingWhen sending to an AcitveMQ broker using Camel its recommended to use a JMS connection pooling such as Jencks. See more here Jencks Connection Pooling You can grab Jencks AMQ pool with maven: <dependency> <groupId>org.jencks</groupId> <artifactId>jencks-amqpool</artifactId> <version>2.1</version> </dependency> And then setup the activemq Camel component as follows: <!-- use jencks connection pooling so its more effecient to send JMS messages --> <amqpool:pool id="jmsConnectionFactory" xmlns:amqpool="http://jencks.org/amqpool/2.0" brokerURL="tcp://localhost:61616" maxConnections="8"/> <bean id="jmsConfig" class="org.apache.camel.component.jms.JmsConfiguration"> <property name="connectionFactory" ref="jmsConnectionFactory"/> <property name="transacted" value="false"/> <property name="concurrentConsumers" value="10"/> </bean> <bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent"> <property name="configuration" ref="jmsConfig"/> </bean> Invoking MessageListener POJOs in a Camel routeThe ActiveMQ component also provides a helper Type Converter from a JMS MessageListener to a Processor. This means that the Bean component is capable of invoking any JMS MessageListener bean directly inside any route. So for example you can create a MessageListener in JMS like this.... public class MyListener implements MessageListener { public void onMessage(Message jmsMessage) { // ... } } Then use it in your Camel route as follows from("file://foo/bar").
bean(MyListener.class);
That is, you can reuse any of the Camel Components and easily integrate them into your JMS MessageListener POJO! Getting Component JARYou need these dependencies
camel-jmsYou must have the camel-jms as dependency as ActiveMQ is an extension to the JMS component. <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-jms</artifactId> <version>1.6.0</version> </dependency> The ActiveMQ Camel component is released with the ActiveMQ project itself. ActiveMQ 5.2 or later<dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-camel</artifactId> <version>5.2.0</version> </dependency> ActiveMQ 5.1.0For 5.1.0 its in the activemq-core library <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-core</artifactId> <version>5.1.0</version> </dependency> Alternatively you can download the component jar directly from the Maven repository: ActiveMQ 4.xFor this version you must use the JMS component instead. Please be careful to use a pooling connection factory as described in the JmsTemplate Gotchas See Also |