Почему errorChannel не вызывается в случае MQException из int-jms: outbound-channel-adapter? - PullRequest
0 голосов
/ 07 июня 2019

JMS-адаптер исходящего канала работает отлично, но я периодически вижу эту ошибку в журнале, однако сообщение MQ по-прежнему получает доставлено.

2019-06-07 10:16:22 [JMSCCThreadPoolWorker-5] INFO osjcCachingConnectionFactory - Обнаружено исключение JMS - сброс базового соединения JMS com.ibm.msg.client.jms.DetailedJMSException: JMSWMQ1107:Возникла проблема с этим соединением.в com.ibm.msg.client.wmq.common.internal.Reason.reasonToException (Reason.java:578) в com.ibm.msg.client.wmq.common.internal.Reason.createException (Reason.java:214)на com.ibm.msg.client.wmq.internal.WMQConnection.consumer (WMQConnection.java:794) на com.ibm.mq.jmqi.remote.api.RemoteHconn.callEventHandler (RemoteHconn.java:2903) на com.ibm.mq.jmqi.remote.api.RemoteHconn.driveEventsEH (RemoteHconn.java:628) в com.ibm.mq.jmqi.remote.impl.RemoteDispatchThread.processHconn (RemoteDispatchThread.java:691) в com.ibm.remote.impl.RemoteDispatchThread.run (RemoteDispatchThread.java:233) в com.ibm.msg.client.commonservices.workqueue.WorkQueueItem.runTask (WorkQueueItem.java:263) в com.ibm.msg.cliue.com.SimpleWorkQueueItem.runItem (SimpleWorkQueueItem.java:99) в com.ibm.msg.client.commonservices.workqueue.WorkQueueItem.run (WorkQueueItem.java:284) в com.ibm.msg.client.commonserWorkue(WorkQueueManager.java:312) на com.ibm.msg.client.commonservices.j2se.workqueue.WorkQueueManagerImplementation $ ThreadPoolWorker.run (WorkQueueManagerImplementation.java:1214) Причина: com.ibm.mq.MQException: JMSCMQ0001: сбой вызова WebSphere MQ 2009, причина: код причины 2 ', FILE MIL (MQ) MIL (MQ), MQ, MQ, MQ, MQ, MQ, MQ, MQ, MQ'(' MQRC_CONNECTION_BROKEN ').

... Это ошибка конфигурации канала:

<int:header-enricher id="errorMsg.HeaderEnricher"
    input-channel="errorChannel"
    output-channel="omniAlertsJmsErrorChannel">

... и настроен адаптер исходящего канала jms:

<int-jms:outbound-channel-adapter
    id="jmsOutToNE" channel="umpAlertNotificationJMSChannel" 
    destination="senderTopic" 
    jms-template="jmsQueueTemplate" 
    >

Я ожидаю omniAlertsJmsErrorChannel для получения MessageHandlingException , чего не происходит от jmsOutToNE адаптера.Все другие ошибки канала / потока направляются в omniAlertsJmsErrorChannel .

Кроме того, интересно, не существует ли внутренний jms-адаптер исходящих каналов при повторной попытке, когда com.ibm.mq.MQException происходит, и это становится успешным в следующей попытке?

1 Ответ

0 голосов
/ 07 июня 2019

errorChannel не используется в любом MessageHandler. Их исключение просто бросают звонящему. Чтобы обработать эти исключения, вам нужно рассмотреть возможность добавления request-handler-advice-chain с ExpressionEvaluatingRequestHandlerAdvice. Или, если мы говорим о повтор , вы также можете добавить к этой цепочке RequestHandlerRetryAdvice.

Подробнее см. В справочном руководстве .

Не знаю, почему ваше сообщение все еще доставляется в MQ. В <int-jms:outbound-channel-adapter нет никаких повторных попыток. Это может быть поведение адаптера MQ Connection Factory в библиотеке IBM.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...