如果我的应用程序中断,如何使用 ActiveMQ 恢复队列中的消息?
How to recover messages in queue with ActiveMQ if my application breaks?
我是 ActiveMQ
的新手。我有 2 queues
:parser-queue
和 generation-queue
。我的应用程序 运行 在 2 个不同的服务器 中,两者都在 侦听 队列。我的工作流程非常简单,从解析器队列获取消息,处理它并在工作完成后将另一条消息放入生成队列。
但是,如果在我的工作过程中获取消息并对其进行处理,我的应用程序会关闭,或者由于任何原因而中断。
如何才能将未正确处理的同一封邮件再次发送到我的队列以便进行处理?
我正在阅读有关 Subscription Recovery Policy 的内容,但这似乎是一个非常复杂的主题,而且我不确定是否要使用基于时间的策略,因为我的工作可能会随着时间的推移而完全不同由我的应用程序处理。
您应该在 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/
我是 ActiveMQ
的新手。我有 2 queues
:parser-queue
和 generation-queue
。我的应用程序 运行 在 2 个不同的服务器 中,两者都在 侦听 队列。我的工作流程非常简单,从解析器队列获取消息,处理它并在工作完成后将另一条消息放入生成队列。
但是,如果在我的工作过程中获取消息并对其进行处理,我的应用程序会关闭,或者由于任何原因而中断。
如何才能将未正确处理的同一封邮件再次发送到我的队列以便进行处理?
我正在阅读有关 Subscription Recovery Policy 的内容,但这似乎是一个非常复杂的主题,而且我不确定是否要使用基于时间的策略,因为我的工作可能会随着时间的推移而完全不同由我的应用程序处理。
您应该在 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/