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

标签 java ibm-mq

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

最佳答案

首先,值得注意的是,所提出的设计是一个非常非常糟糕的设计。效果是将异步消息传送回同步消息传送。这将消息生产者与消费者耦合,引入了位置和解析依赖性,破坏了集群,破坏了 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(); 

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

关于java - 如何从 Java 获取连接到 Websphere MQ 队列的消费者数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23523259/

相关文章:

java - 从 ListModel 中删除元素会删除错误的元素

java - JPA:保留/更新子项期间的事件通知?

ios - 在 iOS 环境的混合应用程序中在后台启用 MQTT 服务

java - 在大型机中使用 JMS 从 java 连接到 MQ

mocking - 通过 websphere mq 模拟外部系统

java - 在compareTo中比较对象的更多字段

java - RRD4J fetch 检索奇怪的值

java - 自动启动 false 不适用于 DefaultMessageListenerContainer

ejb-3.0 - 在MQ系列中配置 'retry delay'

java - Java 应用程序中 SQLBase 的使用