我的应用程序具有 MQ Java 客户端 9.0.4.0 到 MQ 服务器 9.1.0.* 在某些事件中,当 MQ 服务器关闭时,我的 MQ 客户端开始抛出连续的异常。 我正在寻找可以使用哪些客户端配置来避免连续异常不断填充日志和磁盘空间以防不被注意到的情况。
下面是最重要的异常详细信息 - 还有更多的长包装异常详细信息,此处未提及。
202x-xx-13 15:18:17,521 错误 [com.xxx.fixengine.jms.client.consumer.dClient~JmsConsumer~xxx.BW_TMATCH.CAM.ALLOC] [com.xxx.fixengine.jms.client.consumer。 d] 处理消息时出错:错误 - JMSWMQ2002:无法从目标“xxx.BW_TMATCH.CAM.ALLOC”获取消息。 com.ibm.mq.jmqi.JmqiException:CC=2;RC=2009
2024-xx-13 15:18:17,521 信息 [com.xxx.fixengine.jms.client.consumer.dClient~JmsConsumer~xxx.BW_TMATCH.CAM.ALLOC] [com.xxx.fixengine.jms.client.a.b]回滚事务上下文:null 2024-xx-13 15:18:17,522 警告 [com.xxx.fixengine.jms.client.consumer.dClient~JmsConsumer~xxx.BW_TMATCH.CAM.ALLOC] [com.xxx.fixengine.jms.client.consumer.d ] 事务回滚失败 com.ibm.mq.jmqi.JmqiException:CC=2;RC=2009
MQ 客户端作为使用基本参数连接的队列,下面作为正在运行的连接工厂 com.rbs.gbm.futures.stp.fix.jms.ConfigurableMQQueueConnectionFactory
对于某些事件,如果 MQ 服务器出现故障,我的 MQ 客户端会开始抛出连续的异常,直到服务器再次自行启动。
我正在寻找一些客户端设置或 API 更改来阻止此故障异常,这应该通过有限次数控制或根本不控制
如果您能出示您的应用程序代码,将会很有帮助。
我认为你在这里没有什么选择:
捕获 MQException,如果原因代码是 2009,则退出循环(您似乎已经遇到了)。
使用连接工厂上的重新连接选项。如果存在连接问题(例如网络问题导致与队列管理器的连接中断),重新连接选项使 MQ JMS 库能够重新连接到队列管理器。您还可以设置 MQ JMS 库继续重新连接尝试的超时时间。
例如:
cf = ff.createConnectionFactory();
// Reconnect to queue manager
cf.setIntProperty(WMQConstants.WMQ_CLIENT_RECONNECT_OPTIONS, WMQConstants.WMQ_CLIENT_RECONNECT_Q_MGR);
// Reconnection timeout
cf.setIntProperty(WMQConstants.WMQ_CLIENT_RECONNECT_TIMEOUT, 1000);