This is the messaging Spring Bean which I have written which contains the message listener that continuously listens from queue:
<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>
Next is my error handler class. I have provides the error handler in case of any wrong queue names or any wrong details regarding queue is provided then error handler can catch exception and shut down the program.
package com.cls.tools.nrbypass.utils;
import org.springframework.jms.JmsException;
import org.springframework 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) {
// TODO Auto-generated method stub
System.exit(0);
}
}
Below is the error getting generated without stopping the listener:
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.mag.client.wmg.common.internal.Reason.createException (Reason.java:209)
... 17 common frames omitted
Wrapped by: com.ibm.mag.client.jma.DetailedInvalidDestinationException: JMSWMQ2008: Failed to open MQ queue 'TEST2. QUEUE'.
at com.ibm.mag.client.wmq.common.internal.Reason.reasonToException (Reason.java:503)
at com.ibm.mag.client.wmq.common.internal.Reason.createException (Reason.java:221)
at com.ibm.mag.client.wmg.internal.WMQMessageConsumer.checkJmqiCallSuccess (WMQMessageConsumer.java:129)
at com.ibm.mag.client.wmq.internal.WMQConsumerShadow.initialize(WMQConsumerShadow.java:976)
at com.ibm.mag.client.wmg.internal.WMQSyncConsumerShadow.initialize (WMQSyncConsumerShadow.java:139) )
at com.ibm.mag.client.wmq.internal.WMQMessageConsumer.<init>(WMQMessageConsumer.java:257)
at com.ibm.mag.client.wmg.internal.WMQSession.createConsumer (WMQSession.java:788)
at com.ibm.mag.client.jms.internal. JmsSessionImpl.createConsumer (JmaSessionImpl.java:818)
at com.ibm.mag.client.jma.internal. JmsSessionImpl.createConsumer (JmaSessionImpl.java:868)
at com.ibm.mag.client.jma.internal.JmsQueueSessionImpl.createReceiver (JmaQueueSessionImpl.java:97)
at com.ibm.mg.jma.MQQueueSession.createReceiver (MQQueueSession.java:126)
at com.ibm.mg.jma.MQQueueSession.createConsumer (MQQueueSession.java:201)
at org.springframework.jma.listener.AbstractMessageListenerContainer.createConsumer
at (AbstractMessageListenerContainer.java:874)
at org.springframework.jma.listener.AbstractPollingMessageListenerContainer.createListenerConsumer (AbstractPollingMessageListenerContainer.java:225)
at org.springframework.jms.listener.DefaultMessageListenerContainer AsyncMessageListener Invoker.initResourcesIfNecessary (DefaultMessageListenerContairer.java:1264)
at org.springframework.jma.listener.DefaultMessageListenerContainers AsyncMessageListener Invoker.invokelistener (DefaultMessageListenerContainer.java:12
at org.springframework.jms.listener.DefaultMessageListenerContainers AsyncMessageListener Invoker.executeOngoinp(DefaultMessageListenerContainer.jaxa:1227)
at org.springframework.jma.listener. DefaultMessageListenerContainer AsyncMessageListener Invoker.run(DefaultMessageListenerContainer.java:1120)
at java.lang.Thread.run(Thread.java:750)
So the error handler is not getting caught and repeatedly above error is getting generated.