如何从Java获取连接到Websphere MQ队列的使用者数量

Men*_*sur 5 java ibm-mq

我想从Java获取特定Websphere MQ队列的使用者数量吗?在将消息放入队列之前,我需要知道是否有人要使用这些消息。

T.R*_*Rob 4

首先,值得注意的是,所提出的设计是一个非常非常糟糕的设计。效果是将异步消息传递回同步消息传递。这将消息生产者与消费者耦合起来,引入位置和解析依赖关系,破坏集群,破坏 WMQ 的负载分配和平衡,将网络拓扑嵌入到应用程序中,并使整个系统变得脆弱。在故意破坏除实际队列/出队操作之外的所有最佳功能后,请不要责怪 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(); 
Run Code Online (Sandbox Code Playgroud)

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