【问题标题】:How to make my transaction commit in ActiveMQ, when my process is done successfully at the client side当我的流程在客户端成功完成时,如何在 ActiveMQ 中提交我的事务
【发布时间】: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跨国管理器。

【问题讨论】:

标签: apache-camel activemq


【解决方案1】:

仅将&lt;transacted/&gt; 添加到您的路线是不够的。您还需要配置您的 JMS 组件以支持事务。

我建议您仔细阅读documentation。 以下是链接中的相关代码示例:

<bean id="jmstx" class="org.apache.camel.component.jms.JmsComponent"> 
  <property name="configuration" ref="jmsConfig" /> 
</bean> 

<bean id="jmsConfig" class="org.apache.camel.component.jms.JmsConfiguration"> 
  <property name="connectionFactory" ref="jmsConnectionFactory"/> 
  <property name="transactionManager" ref="jmsTransactionManager"/> 
  <property name="transacted" value="true"/>
  <property name="cacheLevelName" value="CACHE_CONNECTION"/>
</bean> 

<bean id="jmsTransactionManager" class="org.springframework.jms.connection.JmsTransactionManager">
  <property name="connectionFactory" ref="jmsConnectionFactory" />
</bean>

<bean id="jmsConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
  <property name="brokerURL" value="vm://broker1?brokerConfig=xbean:tutorial/activemq.xml"/>
</bean>

【讨论】:

  • 请查看已编辑的问题,我正在以这种方式使用该配置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-10
  • 2023-02-24
  • 1970-01-01
  • 2015-06-25
  • 2016-10-10
  • 2016-04-22
相关资源
最近更新 更多