如果我的应用程序中断,如何使用ActiveMQ恢复队列中的消息?

时间:2016-03-23 14:53:17

标签: java spring jms activemq spring-jms

我是ActiveMQ的新手。我有2 queuesparser-queuegeneration-queue。我的应用程序在 2个不同的服务器中运行,两者都正在侦听到队列。我的工作流非常简单,从解析器队列中获取消息,处理它并在作业完成时将另一条消息放入生成队列中。

但是,如果在我的工作过程中,获取消息并处理它,我的应用程序将关闭,或者因任何原因而中断。

如果处理不正确的同一条消息怎么能再次发送到我的队列才能被处理?

我正在阅读Subscription Recovery Policy,但这似乎是一个非常复杂的主题,而且我不确定我是否想要及时使用基于政策的政策,因为我的工作可以在时间上有所不同,以便完全由我的申请。

1 个答案:

答案 0 :(得分:4)

您应该在JMS使用者中禁用自动确认功能。在这种情况下,在客户确认消息之前,消息不会被消费。

如果您使用的是Spring,那么就可以这样做:

<bean id="myJmsConsumer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
    <property name="connectionFactory" ref="jmsFactory"/>
    <property name="destinationName" value="MY_QUEUE"/>
    <property name="messageListener" ref="myJmsListener"/>
    <property name="sessionTransacted" value="false"/>
    <property name="sessionAcknowledgeModeName" value="CLIENT_ACKNOWLEDGE"/>
    <property name="exceptionListener" ref="exceptionListener"/>
</bean>

有关JMS交易的更多信息,请访问:http://www.javacodebook.com/2013/08/20/spring-book-chapter-17-messaging-with-spring/11/