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

标签 java spring jms activemq spring-jms

我是 ActiveMQ 的新手。我有 2 个队列:解析器队列和生成队列。我的应用程序在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/

关于java - 如果我的应用程序中断,如何使用 ActiveMQ 恢复队列中的消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36181514/

相关文章:

java - 为什么首选使用不可变对象(immutable对象)作为 Set 的元素?

java - 使用正则表达式匹配日期范围

java - Spring导入看不到资源

java - Spring-MVC 与 JSP。如何从 JSP 页面访问单例范围的对象?

spring - Spring JMS/AQ。如何为多个使用者队列创建持久订阅。 ils子

java - junit 或 spock 的 JMS 测试实用程序

java - 以正确的顺序和良好的性能处理 JMS 消息

java - Graylog Google Pub/Sub 输出插件问题

spring - 如何在子上下文中具有Spring Security上下文

java - 捕获 Spring MVC 最大上传大小错误