如何从Java连接到Websphere MQ队列的消费者数量

我试图从Java获取特定Websphere MQ队列的使用者数量? 我需要知道是否有人在将消息放入队列之前使用它们。

首先,值得注意的是,所提出的设计是一个非常非常糟糕的设计。 其结果是将异步消息传递回同步消息传递。 这将消息生成者与消费者联系起来,引入位置和解决方案依赖关系,打破群集,破坏WMQ的负载分配和平衡,将网络拓扑嵌入到应用程序中,并使整个系统变得脆弱。 在故意击败除实际队列/出队操作之外的所有最佳function之后,请不要责怪WMQ没有正常工作。

但是,要更直接地回答您的问题,请使用队列对象的getOpenInputCount方法来获取打开的输入句柄的数量。 就是这样:

 MQQueue outQ = qMgr.accessQueue(qName, openOptions, null, // default q manager null, // no dynamic q name null); // no alternate user id int inCount = outQ.getOpenInputCount(); 

请注意,您只能查询本地队列上的输入句柄。 如果队列托管在除连接邮件发件人之外的QMgr上,则此方法将不起作用。 当然,正常情况下,消息发送方和接收方将驻留在不同的QMgrs上。 但是,由于您没有提及很多关于设计的内容,因此我假设出于此答案的目的,来自消息生产者和消费者的连接附加到相同的QMgr。 如果情况并非如此,我们需要就PCF进行讨论,甚至对设计提出更强烈的警告。