MQSeries - 允许新接收器接管连接的任何设置?

时间:2012-09-11 01:57:44

标签: java ibm-mq

我们知道可以配置MQ服务器,使得如果已经有接收器连接到同一个MQ队列,则新接收器将无法连接到MQ服务器。错误如下所示:

引起:com.ibm.mq.MQException:JMSCMQ0001:WebSphere MQ调用失败,compcode为'2'('MQCC_FAILED')原因'2042'('MQRC_OBJECT_IN_USE')

但有没有办法配置服务器或客户端以允许新接收器连接到MQ服务器并断开任何现有的接收器连接?

目前,我的接收器如何连接到服务器。我想知道是否可以对setIntProperty做些什么。

cf = new MQQueueConnectionFactory();
cf.setHostName(mqHost);
cf.setPort(mqPort);
cf.setIntProperty(WMQConstants.WMQ_CONNECTION_MODE, WMQConstants.WMQ_CM_CLIENT);
cf.setQueueManager(mqQueueManager);
cf.setChannel(mqChannel);

conn = (MQQueueConnection) cf.createQueueConnection();
session = (MQQueueSession) conn.createQueueSession(false, Session.CLIENT_ACKNOWLEDGE);
queue = (MQQueue) session.createQueue(mqQueue);
receiver = (MQQueueReceiver) session.createReceiver(queue);

谢谢!

格里

1 个答案:

答案 0 :(得分:2)

好的,你在这里混合不同的概念。您的应用程序正在使用CLNTCONN通道连接到QMgr的SVRCONN通道。由于内存和系统资源允许,Yopu可以在SVRCONN通道上拥有尽可能多的连接。连接不是问题。

'2042'('MQRC_OBJECT_IN_USE')表示程序正在获得对队列的独占访问权。有两个修复:

  1. 不要使用对队列的独占访问权限。检查队列的DEFSOPT值,看它是否设置为EXCLSHARED。如果您需要它可共享,请确保队列设置反映出来。
  2. 如果您需要队列保持独占(例如,因为消息与序列有关),请在尝试新连接之前停止先前的连接。当程序没有正常关闭连接时,孤立的通道代理会保持连接的队列处于打开状态。最终,代理超时,任何独占输入队列再次可用。如果程序正在离开孤立频道,请修复程序。作为短期措施,您可以手动停止孤立通道以释放输入队列上的锁定。