• 在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的 spring 配置:

<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发送消息 .

我预计一条消息将被一个且只有一个消费者所取消 . 但它没有这样做,我看到重复的消息 .

我需要使用交易吗?