You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JmsListener容器错误处理器未按预期触发异常问题排查

自定义JmsErrorHandler未触发问题

我配置了Spring JMS消息监听器用于持续监听队列,相关Bean配置如下:

<bean id="JmsErrorHandler" class="com.cls.tools.nrbypass.utils.JmsErrorHandler" />

<jms:listener-container connection-factory="mqXAConnectionFactory" destination-type="queue" transaction-manager="jmsTxnManager" acknowledge="transacted" concurrency="1" error-handler="JmsErrorHandler">
    <jms:listener destination="$(instance.$(instanceName).input.queue)" ref="messageListener" />
</jms:listener-container>

对应的错误处理器类,目的是在队列名称错误或配置有误时捕获异常并关闭程序:

package com.cls.tools.nrbypass.utils; 

import org.springframework.jms.JmsException;
import org.springframework.stereotype.Service;
import org.springframework.util.ErrorHandler;
import com.cls.common.launcher.ShutdownUtils;

@Service
public class JmsErrorHandler implements ErrorHandler {

    @Override
    public void handleError(Throwable t) { 
        System.exit(0);
    }
}

但实际运行时,监听器并未停止,而是反复生成以下错误,自定义的JmsErrorHandler完全没被触发:

2025-02-07 15:17:10,433 INFO [main] c.c.s.handler.SignalHandlerUtils [registerSignals] Registering signals
2025-02-07 15:17:15,519 WARN [jmsContainer-1] o.s.j.l.DefaultMessageListenerContainer [handleListenerSetupFailure] Setup of JMS message listener failed for destination 'TEST2.QUEUE' trying to recover. Cause: JMSWMQ2008: Failed to open MQ queue 'TEST2.QUEUE'; nested exception is
com.ibm.mq.MQException: JMSCMQ0001: WebSphere MQ call failed with compcode '2' ('MQCC FAILED') reason '2085' ('MQRC_UNKNOWN_OBJECT_NAME'). com.ibm.mq.MQException: JMSCMQ0001: WebSphere MQ call failed with compcode '2' ('MQCC FAILED') reason '2085' ('MQRC_UNKNOWN_OBJECT_NAME').
  at com.ibm.mq.client.wmq.common.internal.Reason.createException (Reason.java:209)
  ... 17 common frames omitted
Wrapped by: com.ibm.mq.client.jms.DetailedInvalidDestinationException: JMSWMQ2008: Failed to open MQ queue 'TEST2.QUEUE'.
  at com.ibm.mq.client.wmq.common.internal.Reason.reasonToException (Reason.java:503)
  at com.ibm.mq.client.wmq.common.internal.Reason.createException (Reason.java:221)
  at com.ibm.mq.client.wmq.internal.WMQMessageConsumer.checkJmqiCallSuccess (WMQMessageConsumer.java:129)
  at com.ibm.mq.client.wmq.internal.WMQConsumerShadow.initialize(WMQConsumerShadow.java:976) 
  at com.ibm.mq.client.wmq.internal.WMQSyncConsumerShadow.initialize (WMQSyncConsumerShadow.java:139)
  at com.ibm.mq.client.wmq.internal.WMQMessageConsumer.<init>(WMQMessageConsumer.java:257)
  at com.ibm.mq.client.wmq.internal.WMQSession.createConsumer (WMQSession.java:788)
  at com.ibm.mq.client.jms.internal.JmsSessionImpl.createConsumer (JmsSessionImpl.java:818)
  at com.ibm.mq.client.jms.internal.JmsSessionImpl.createConsumer (JmsSessionImpl.java:868)
  at com.ibm.mq.client.jms.internal.JmsQueueSessionImpl.createReceiver (JmsQueueSessionImpl.java:97)
  at com.ibm.mq.jms.MQQueueSession.createReceiver (MQQueueSession.java:126)
  at com.ibm.mq.jms.MQQueueSession.createConsumer (MQQueueSession.java:201)
  at org.springframework.jms.listener.AbstractMessageListenerContainer.createConsumer(AbstractMessageListenerContainer.java:874)
  at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.createListenerConsumer (AbstractPollingMessageListenerContainer.java:225)
  at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.initResourcesIfNecessary (DefaultMessageListenerContainer.java:1264)
  at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener (DefaultMessageListenerContainer.java:12)
  at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoing(DefaultMessageListenerContainer.java:1227)
  at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:1120)
  at java.lang.Thread.run(Thread.java:750)

请问:为何自定义JmsErrorHandler未触发,无法终止报错的监听器?


内容的提问来源于stack exchange,提问作者Coder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 15:53:10