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

MULE Connection with WMQ Gateway Queue Manager

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

WMQ GW 的 JMS 连接器的 Mule 配置:

<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)

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

我知道 mule 应该重新尝试并获得与网关 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 你会不断发现已经在以后的错误修复版本中解决的问题。您可以在发行说明中找到每个版本的修复列表:

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