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



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

由以下原因引起:com.ibm.mq.mq异常:JMSCMQ0001:WebSphere mq调用失败,编译代码为"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);

谢谢!

Gerry

好吧,您在这里混合了不同的概念。您的应用程序正在使用CLNTCONN通道连接到QMgr的SVRCONN通道。Yopu可以在SVRCONN通道上拥有内存和系统资源允许的任意数量的连接。连接不是问题所在。

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

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

相关内容

最新更新