【发布时间】:2018-01-15 19:41:13
【问题描述】:
<route>
<from
uri="jms:queue:inBox?concurrentConsumers=20" />
<camel:process ref="processor1" />
<transacted/>
<camel:process ref="Processor2" />
</route>
一旦我的处理器 2 成功,收件箱队列必须从 activeMQ 中取出消息。目前,它正在让 JMS 端点上的消息出队。
<bean id="jmsTransactionManager"
class="org.springframework.jms.connection.JmsTransactionManager">
<property name="connectionFactory" ref="jmsConnectionFactory" />
</bean>
<bean id="jmsConnectionFactory"
class="com.mypackage.EncryptionAwareActiveMQConnectionFactory">
<property name="brokerURL" value="tcp://localhost:61616" />
<property name="userName" value="admin" />
<property name="password" value="@PASSWORD@" />
</bean>
<bean id="pooledConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory"
init-method="start" destroy-method="stop">
<property name="maxConnections" value="20" />
<property name="connectionFactory" ref="jmsConnectionFactory" />
</bean>
<bean id="jmsConfig" class="org.apache.camel.component.jms.JmsConfiguration">
<property name="connectionFactory" ref="pooledConnectionFactory" />
<property name="concurrentConsumers" value="50" />
<property name="deliveryPersistent" value="true" />
<property name="transacted" value="true" />
<property name="transactionManager" ref="jmsTransactionManager" />
</bean>
<bean id="jms" class="org.apache.activemq.camel.component.ActiveMQComponent">
<property name="configuration" ref="jmsConfig" />
</bean>
所以我正在使用这样的配置并将transacted设置为true并且我还使用了JMS跨国管理器。
【问题讨论】:
-
把transacted放在
<from>之后,并在JMS组件上设置transacted=true。请参阅文档:camel.apache.org/transactional-client.html。如果你有一本 CiA 的书,那么它有一整章是关于交易的。您还可以查看一些 CiA2 源代码示例(免费):github.com/camelinaction/camelinaction2/blob/master/chapter12/…
标签: apache-camel activemq