与WMQ网关队列管理器的MULE连接

问题描述

我们正在使用Mule运行时3.9.0。在生产环境中,我们的Mule应用程序连接到WMQ网关队列管理器。 WMQ网关队列管理器在2个节点上配置(即主动/被动)。 WMQ在活动节点随时间变化的两个节点之间切换。

JMS连接器到WMQ GW的M子配置:

<spring:bean id="MQGatewayConnectionFactory" class="com.ibm.mq.jms.MQQueueConnectionFactory" name="MQGatewayConnectionFactory" scope="singleton"> 
    <spring:property name="transportType" value="1"></spring:property>  
    <spring:property name="connectionNameList" value="${mqm.gw.connectionNameList}"></spring:property>  
    <spring:property name="channel" value="${mqm.gw.channel}"></spring:property>  
    <spring:property name="queueManager" value="${mqm.gw.name}"></spring:property>  
</spring:bean> 

<jms:connector name="WebsphereMQConnector_GW_Adapters" 
       doc:name="WebsphereMQConnector_GW_Adapters" 
       connectionFactory-ref="${MQGatewayConnectionFactory}"
       username="${mqm.user}"  
       validateConnections="true" 
       maxRedelivery="-1" 
       cacheJmsSessions="false" 
       disableTemporaryReplyToDestinations="true" 
       persistentDelivery="true" 
       specification="1.1"> 
    <reconnect-forever frequency="10000"/>  
</jms:connector>

以下配置属性用于上述连接:

## MQ GW (for File Adapters)
mqm.gw.connectionNameList=euukteialmq01uf(11414),euukteialmq02uf(11414)
mqm.gw.name=QMUAGW01
mqm.gw.channel=CLIENT.APP.SVRCONN

当WMQ网关切换活动节点时,JMS连接器WebsphereMQConnector_GW_Adapters停止,我们得到以下错误日志:

ERROR 2020-10-31 21:31:12,178 [JMSCCThreadPoolWorker-2555] org.mule.exception.DefaultSystemExceptionStrategy:
********************************************************************************
Message               : JMSWMQ1107: A problem with this connection has occurred. (com.ibm.msg.client.jms.DetailedJMSException)
JMS Code              : JMSWMQ1107
Element               : /WebsphereMQConnector_GW_Adapters @ app:af_globals.xml:157 (WebsphereMQConnector_GW_Adapters)
--------------------------------------------------------------------------------
Root Exception stack trace:
com.ibm.mq.MQException: MQ delivered an asynchronous event with completion code '2',and reason '2009'.
    at com.ibm.msg.client.wmq.internal.WMQConnection.consumer(WMQConnection.java:800)
    at com.ibm.mq.jmqi.remote.api.RemoteHconn.callEventHandler(RemoteHconn.java:3132)
    at com.ibm.mq.jmqi.remote.api.RemoteHconn.driveEventsEH(RemoteHconn.java:658)
    at com.ibm.mq.jmqi.remote.impl.RemotedispatchThread.processHconn(RemotedispatchThread.java:666)
    at com.ibm.mq.jmqi.remote.impl.RemotedispatchThread.run(RemotedispatchThread.java:223)
    at com.ibm.msg.client.commonservices.workqueue.WorkQueueItem.runTask(WorkQueueItem.java:319)
    at com.ibm.msg.client.commonservices.workqueue.SimpleWorkQueueItem.runItem(SimpleWorkQueueItem.java:99)
    at com.ibm.msg.client.commonservices.workqueue.WorkQueueItem.run(WorkQueueItem.java:343)
    at com.ibm.msg.client.commonservices.workqueue.WorkQueueManager.runWorkQueueItem(WorkQueueManager.java:312)
    at com.ibm.msg.client.commonservices.j2se.workqueue.WorkQueueManagerImplementation$ThreadPoolWorker.run(WorkQueueManagerImplementation.java:1227)

********************************************************************************

我知道m子应该重新尝试并获得与网关WMQ队列管理器的连接,但事实并非如此。而且我们被迫重新启动生产Mule节点。

根据Mule文章,此为a known problem,Mule尚未在运行时3.9.0上解决此问题。有人可以帮助我以最佳方式使这种连接在主动-被动WMQ上正常工作吗?

解决方法

知识库文章为您提供了答案。 Mule 3.9.0有问题。该修复程序在3.9.3+中。我强烈建议迁移到Mule 3.9.4,作为Mule 3的最新版本和更稳定的版本。使用3.9.0,您将不断发现在以后的错误修复版本中已解决的问题。您可以在发行说明中找到每个版本的修复程序列表:

或者,您可以创建一个支持案例,以请求针对您的版本的此问题的补丁。