java - Spring JMS 消息不会重试或在错误时进入回退队列

标签 java spring websphere spring-jms mq

我正在使用 Spring JMS 和 MQ 来发送和接收消息。在读取消息时,我想确保在发生任何错误时,消息将被重新传递至少 3 次,然后将它们发送到 Backout Queue。主队列的回退阈值为 3。

我将 Transacted 设置为 True,将 sessionAcknowledgeMode 设置为 CLIENT_ACKNOWLEDGE(值为 2)。 在消息监听器中,我也在执行 message.acknowledge(); 但是,它不起作用。我错过了什么吗?

<jee:jndi-lookup id="QConnectionFactory" jndi-name="jndi/QCF"/>
<jee:jndi-lookup id="MainQ" jndi-name="jndi/MainQ"/>
<jee:jndi-lookup id="MainQBO" jndi-name="jndi/MainQBO"/>

<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
    <property name="connectionFactory">
        <ref local="QConnectionFactory"/>
    </property>
    <property name="sessionAcknowledgeMode" value="2" />
    <property name="sessionTransacted" value="true" />
</bean>

<bean id="msgHandler" class="myservice.MyMessageHandler">
    <property name="jmsTemplate" ref="jmsTemplate"/>
    <property name="MainQ" ref="MainQ"/>
    <property name="MainQBO" ref="MainQBO"/>
</bean>


<bean id="messageListener" class="myservice.MyMessageListener" />
<bean id="jmsContainer"
    class="org.springframework.jms.listener.DefaultMessageListenerContainer">
    <property name="connectionFactory" ref="QConnectionFactory"/>
    <property name="destination" ref="MainQ"/>
    <property name="messageListener" ref="messageListener" />
    <property name="sessionTransacted" value="true"/>
    <property name="sessionAcknowledgeMode" value="2"/>
</bean>

Listener Class ...
public void onMessage(Message message) {
    try{
         ... some code ...
         message.acknowledge();
    }catch(Exception E){
        logger.erro(e);
    }
}

最佳答案

“不工作”的信息永远不够。

这就是说

}catch(Exception E){
    logger.erro(e);
}

你正在捕捉并吃掉异常;监听器需要抛出异常才能重新排队消息。

关于java - Spring JMS 消息不会重试或在错误时进入回退队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56192807/

相关文章:

java - JIT 未优化涉及 Integer.MAX_VALUE 的循环

java - Hadoop无法运行程序

java - 无法通过liferay发送电子邮件

java - 如何复制 java.util.list 集合

java - 如何在 Spring 应用程序的响应中正确返回图像?

java - Websphere 中的启动类

debugging - websphere 7 调试端口 : 0. 0.0.0

spring - spring Security 中的 UsernamePasswordAuthenticationFilter 没有被调用

java - 二级缓存不适用于 Spring 和 JSF

java - 服务器找不到 java :comp/env/jdbc/my_db data source . .. 在上下文 "java:"中找不到名称 comp/env/jdbc