通过 Mule 的 IBM JMS 处理不同步点问题

Handle out of sync point issue via IBM JMS from Mule

我正在通过 JMS 从 Mule 连接 MQ-8.x,最近我遇到了一个问题,似乎 MQ 写入操作超出了同步点范围,并且由于这个以及巨大的入站负载, MQ进入死锁状态。

<spring:bean id="ConnectionFactory" class="com.ibm.mq.jms.MQConnectionFactory" name="ConnectionFactory">
        <spring:property name="hostName" value="xxxx" />
        <spring:property name="port" value="xxxx"/>
        <spring:property name="queueManager" value="xxxx"/>
        <spring:property name="transportType" value="1"/>
        <spring:property name="channel" value="xxxx"/>
   </spring:bean>

<jms:connector name="JmsConsumer" username="xxxx" password="xxxx" specification="1.1" connectionFactory-ref="ConnectionFactory"  numberOfConsumers="1" validateConnections="true"  persistentDelivery="true" doc:name="JMS"/> 

<jms:outbound-endpoint queue="xxxx" connector-ref="JmsConsumer" doc:name="Audits"/>    

我的操作量会移动,但它只是一个 PUT 操作,所以我真的不确定是否需要 XA 或其他事务管理器。

生成此消息是因为持久消息是在事务之外生成的。 MQ 针对处理事务性持久消息进行了高度优化,并且此警告通知我们未尽可能高效地处理队列。如果您在 transaction/syncpoint 内执行操作,或者如果非持久性足够好,则关闭持久性标志,系统将获得显着的性能改进。

这已在 MQ-9.x 版本中处理,MQ 本身将隐式管理不同步点。 MQ-9.x升级将解决此类问题。

https://www.ibm.com/support/knowledgecenter/en/SSFKSJ_9.0.0/com.ibm.mq.dev.doc/q026865_.html