检查MQ队列深度



谁能帮助在java中做代码获得队列的深度。我们在IBM WebSphere MQ中有4个队列,其中有消息。

我想编写一个jsp来在运行报告时读取队列名称及其深度。我怎么做呢?

参见http://blog.guymahieu.com/2008/06/11/getting-the-depth-of-an-mqseries-queue-from-java/.

我重新实现如下:

import com.ibm.mq.*;
public class QueueManager {
    private final String host;
    private final int port;
    private final String channel;
    private final String manager;
    private final MQQueueManager qmgr;
    public QueueManager(String host, int port, String channel, String manager) throws MQException {
        this.host = host;
        this.port = port;
        this.channel = channel;
        this.manager = manager;
        this.qmgr = createQueueManager();
    }
    public int depthOf(String queueName) throws MQException {
        MQQueue queue = qmgr.accessQueue(queueName, MQC.MQOO_INQUIRE | MQC.MQOO_INPUT_AS_Q_DEF, null, null, null);
        return queue.getCurrentDepth();
    }
    @SuppressWarnings("unchecked")
    private MQQueueManager createQueueManager() throws MQException {
        MQEnvironment.channel = channel;
        MQEnvironment.port = port;
        MQEnvironment.hostname = host;
        MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES);
        return new MQQueueManager(manager);
    }
}

把下面的jar放到你的类路径中:

  • com.ibm.mq * jar
  • j2ee.jar

我看到一个带有Websphere MQ API的响应访问队列

您看过JMX上下文中可访问的mbean吗?如果我必须这样做,我会在Mbean中公开它。

您可以看到IBM JMS拓扑

对于监视和检查资源状态(例如队列深度),有几个选项。首选的选择是使用Application service提供的JMX mbean进行监视:JMSBasicFunction、JMSAdministration和EmbeddedJMSAdministration。您可以通过wsadmin或编程方式访问这些mbean。其次,您可以使用传统的WMQ管理实用程序(如runmqsc或MQExplorer)来查看队列和其他资源。如果要使用这些实用工具,则务必不要对Application Server队列管理器和队列进行任何配置更改。这些资源在Application Server的控制之下。使用MQ实用程序更改这些资源会导致配置失效

不知道您是否在WAS服务器上,如果这仍然是相同的mbean,但您应该在您的AS上找到等效的mbean。

最新更新