单个JMS队列一次只能将工作传送到工作节点一次?

时间:2014-04-08 16:30:02

标签: spring jms activemq

  • On Activemq 5.9.0
  • Spring JMS 3.2.2.RELEASE
  • JDK 1.7.0_51

当我在activemq中设置队列A,然后从消费者C1,C2,C3,C4和C5中消耗队列A时...我怎样才能使从队列A中取出的所有消息始终只是拉了一次?

这5个消费者是工作线程,可以将消息拉出来并对其进行操作。

我不能让C1和C3都拉相同的信息,这会导致问题。

似乎Activemq开箱即用会导致各种重复。是否有一个简单的配置,我可以放入,而无需经过一堆保证交付配置?

我在此处看到此链接:http://www.atomikos.com/Publications/ReliableJmsWithTransactions

任何人都有一些快速配置+使用activemq + spring jms来解决这种情况的例子?

我使用的是默认的activemq.xml文件。

这是JMS的弹簧配置:

<bean id="jmsFactory" class="org.apache.activemq.pool.PooledConnectionFactory"
        destroy-method="stop">
    <property name="connectionFactory">
        <bean class="org.apache.activemq.ActiveMQConnectionFactory">
            <property name="brokerURL">
                <value>tcp://localhost:61616</value>
            </property>
        </bean>
    </property>
</bean>
<bean id="myJmsTemplate" class="org.springframework.jms.core.JmsTemplate">
    <property name="connectionFactory">
            <ref local="jmsFactory" />
    </property>
</bean>

我有Spring JmsTemplate,我首先让5位消费者使用JmsTemplate.recieve方法从队列A中读取。

jmsTemplate.setReceiveTimeout(JmsTemplate.RECEIVE_TIMEOUT_INDEFINITE_WAIT);
msg = jmsTemplate.receive("myqueue");

然后从我使用JmsTemplate.send方法向队列A发送消息。

我预计一条消息将由一个且只有一个消费者拉出。但它没有这样做,我看到重复的消息。

我需要使用交易吗?

0 个答案:

没有答案