Jms outbound-channel-adapter可以很好地工作,但是我间歇性地在日志中看到此错误,但是,MQ消息仍然得到传递。
2019-06-07 10:16:22 [JMSCCThreadPoolWorker-5]信息o.s.j.c.CachingConnectionFactory-遇到JMSException-重置基础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.mq.jmqi.remote.impl.RemoteDispatchThread.run(RemoteDispatchThread.java:233) 在com.ibm.msg.client.commonservices.workqueue.WorkQueueItem.runTask(WorkQueueItem.java:263) 在com.ibm.msg.client.commonservices.workqueue.SimpleWorkQueueItem.runItem(SimpleWorkQueueItem.java:99) 在com.ibm.msg.client.commonservices.workqueue.WorkQueueItem.run(WorkQueueItem.java:284)上 在com.ibm.msg.client.commonservices.workqueue.WorkQueueManager.runWorkQueueItem(WorkQueueManager.java:312) 在com.ibm.msg.client.commonservices.j2se.workqueue.WorkQueueManagerImplementation $ ThreadPoolWorker.run(WorkQueueManagerImplementation.java:1214) 引起原因:com.ibm.mq.MQException:JMSCMQ0001:WebSphere MQ调用失败,compcode为“ 2”(“ MQCC_FAILED”),原因为“ 2009”(“ MQRC_CONNECTION_BROKEN”)。
...这是errorChannel配置:
<int:header-enricher id="errorMsg.HeaderEnricher"
input-channel="errorChannel"
output-channel="omniAlertsJmsErrorChannel">
...并且配置了jms outbound-channel-adapter:
<int-jms:outbound-channel-adapter
id="jmsOutToNE" channel="umpAlertNotificationJMSChannel"
destination="senderTopic"
jms-template="jmsQueueTemplate"
>
我希望 omniAlertsJmsErrorChannel 会收到 MessageHandlingException ,这不是从 jmsOutToNE 适配器发生的。所有其他通道/流错误都将路由到 omniAlertsJmsErrorChannel 。
还想知道当 com.ibm.mq.MQException 发生并且在随后的尝试中成功时,是否在内部重试jms outbound-channel-adapter?
答案 0 :(得分:0)
errorChannel
中的MessageHandler
已停用。他们的异常只是抛出给调用者。要处理这些异常,您需要考虑在request-handler-advice-chain
中添加ExpressionEvaluatingRequestHandlerAdvice
。或者,如果我们谈论的是重试,您还可以在该链中添加RequestHandlerRetryAdvice
。
在Reference Manual中查看更多信息。
虽然不确定为什么您的消息仍然传递到MQ。 <int-jms:outbound-channel-adapter
中没有开箱即用的重试功能。这可能是IBM库中MQ Connection Factory适配器的行为。