Transactions ActiveMQ是否支持多个事务使用者?

Transactions ActiveMQ是否支持多个事务使用者?,transactions,apache-camel,activemq,apache-servicemix,Transactions,Apache Camel,Activemq,Apache Servicemix,我正在ServiceMix中开发OSGI捆绑包,以便从ActiveMQ的同一队列中使用 我需要确保消息只有在一切正常的情况下才会退出队列,这样我才不会丢失该消息。所以我使用了驼峰事务客户端。我通过遵循本教程设法实现了它 然而,问题是,当部署来自同一队列的多个bundle时,我只能让一个consumer同时工作 我应该如何在ActiveMQ中启用并行事务消耗 提前谢谢 问候, 这是我的实现(刚从教程中复制): 骆驼路线: <route> <from uri="

我正在ServiceMix中开发OSGI捆绑包,以便从ActiveMQ的同一队列中使用

我需要确保消息只有在一切正常的情况下才会退出队列,这样我才不会丢失该消息。所以我使用了驼峰事务客户端。我通过遵循本教程设法实现了它

然而,问题是,当部署来自同一队列的多个bundle时,我只能让一个consumer同时工作

我应该如何在ActiveMQ中启用并行事务消耗

提前谢谢

问候,


这是我的实现(刚从教程中复制):

骆驼路线:

   <route>
      <from uri="activemq:queue:foo"/>
      <transacted ref="required"/>
      <process ref="myProcessor"/>
      <to uri="activemq:queue:bar"/>
    </route>

Spring上下文:

<!-- setup JMS connection factory -->
<bean id="poolConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory">
    <property name="maxConnections" value="8"/>
    <property name="connectionFactory" ref="jmsConnectionFactory"/>
</bean>

<bean id="jmsConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
    <property name="brokerURL" value="vm://localhost?broker.persistent=false&amp;broker.useJmx=false"/>
</bean>

<!-- setup spring jms TX manager -->
<bean id="jmsTransactionManager" class="org.springframework.jms.connection.JmsTransactionManager">
    <property name="connectionFactory" ref="poolConnectionFactory"/>
</bean>

<!-- define our activemq component -->
<bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent">
    <property name="connectionFactory" ref="poolConnectionFactory"/>
    <!-- define the jms consumer/producer as transacted -->
    <property name="transacted" value="true"/>
    <!-- setup the transaction manager to use -->
    <!-- if not provided then Camel will automatic use a JmsTransactionManager, however if you
         for instance use a JTA transaction manager then you must configure it -->
    <property name="transactionManager" ref="jmsTransactionManager"/>
</bean>

可以使用ActiveMQ JMS拥有并发使用者

<bean id="jmsConfig" class="org.apache.camel.component.jms.JmsConfiguration">
    <property name="connectionFactory" ref="pooledConnectionFactory" />
    <property name="transacted" value="true" />
    <property name="concurrentConsumers" value="10" />
    <property name="deliveryPersistent" value="true" />
    <property name="requestTimeout" value="20000" />
    <property name="cacheLevelName"  value="CACHE_CONSUMER" />
</bean>

我终于在这里找到了解决方案

问题是由于预取限制。当存在多个使用者时,建议将其设置为0,即使它们不是事务性的

因此,我必须通过添加?destination.consumer.prefetchSize=0来更改骆驼路线,方法如下:

<route> 
<from uri="activemq:queue:foo?destination.consumer.prefetchSize=0"/>
<transacted ref="required"/> <process ref="myProcessor"/>
<to uri="activemq:queue:bar"/>
</route>

非常感谢ashok nanda的回答。也可以使用Camel的activemq组件拥有并发使用者。但是,这将为容器中的一个bundle创建一个线程池,其结果就像在一个容器中部署了同一个bundle的多个实例一样。我需要的是将不同的捆绑包部署在不同的容器中,作为有竞争力的消费者。