首先,值得注意的是,提出的设计是非常非常糟糕的设计。效果是将异步消息传递变回同步消息传递。这将消息生产者与消费者联系起来,引入位置和分辨率依赖性,破坏群集,破坏WMQ的负载分配和平衡,将网络拓扑嵌入到应用程序中,并使整个系统脆弱。请不要责怪WMQ有意破坏了其所有最佳功能(实际的队列/出队操作除外)后无法正常工作。
但是,要更直接地回答您的问题,请使用
getOpenInputCount队列对象的方法获取打开的输入句柄的数量。这是如何做:
MQQueue outQ = qMgr.accessQueue(qName, openOptions, null,// default q manager null,// no dynamic q name null); // no alternate user idint inCount = outQ.getOpenInputCount();
请注意,您只能查询本地队列上的输入句柄。如果队列托管在QMgr上 而
不是连接消息发送者的队列上,则此方法将不起作用。当然,正常情况下,消息发送方和接收方将驻留在不同的QMgr上。但是,由于您没有过多提及该设计,因此,出于本回答的目的,我假设来自消息生产者和消费者的连接都附加到同一QMgr。如果不是这种情况,我们需要对PCF进行讨论,甚至对设计提出更强烈的警告。



