当我在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发送消息。
我预计一条消息将由一个且只有一个消费者拉出。但它没有这样做,我看到重复的消息。
我需要使用交易吗?