【问题标题】:Monitoring IBM MQ with java使用 java 监控 IBM MQ
【发布时间】:2020-07-30 09:29:13
【问题描述】:

如何使用带有标准 IBM MQ 库的 Java 从 IBM MQ 发现队列深度和其他有关队列的指标?

【问题讨论】:

标签: java monitoring ibm-mq metrics


【解决方案1】:

试试下面的示例代码 sn-p 来获取队列深度。

String mqQMgr = "";
String mqQueue = "";

MQEnvironment.hostname = "";
MQEnvironment.port = "";
MQEnvironment.channel = "";    
MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES);

MQQueueManager qMgr = new MQQueueManager(mqQMgr);
MQQueue destQueue = qMgr.accessQueue(mqQueue, openOptions);

int depth = destQueue.getCurrentDepth();
destQueue.close();
qMgr.disconnect();

完整的代码版本(相应地更改您的参数,如绑定或客户端模式、选项等):

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();
    }


    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);
    }

    // This method will return the Queue Depth
    public int queueDepth(String queueName) {
       int depth = -1;
       int openOptions = MQC.MQOO_INQUIRE + MQC.MQOO_FAIL_IF_QUIESCING;
       MQQueue queue = null;
       try {
          queue = qmgr.accessQueue(queueName, openOptions);
          depth = queue.getCurrentDepth();
       }
       catch (MQException e)
       {
          System.out.println("CC=" +e.completionCode + " : RC=" + e.reasonCode);
       }
       finally {
          try {
             if (queue != null)
                queue.close();
          }
          catch (MQException e) {
             System.out.println("CC=" +e.completionCode + " : RC=" + e.reasonCode);
          }
       }

       return depth;
    }

    ........ Other Methods .......
}

【讨论】:

  • @ЕвгенийЧижиков :很高兴知道这一点,如果我的代码对您有帮助,您可以为我的答案投票。
  • @Som 您的 queueDepth 方法中存在内存泄漏。您永远不会关闭队列,因此每次调用 queueDepth 方法时,都会泄漏内存。规则#1,如果你打开它,请确保你关闭它。与队列管理器的连接也是如此。
  • @Roger:嗨,Roger,由于课程很长,我没有给出所有方法。我已经为队列、会话、qgr 正确实现了所有关闭方法,我还实现了回滚和提交。但我故意选择退出
  • @Som 给出部分代码 sn-ps 并期望程序员知道他们需要做的其他事情是一个坏主意。程序员只需将您的代码复制并粘贴到应用程序中,并认为他们有一个完整的解决方案。
猜你喜欢
  • 1970-01-01
  • 2018-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-17
  • 2018-09-29
  • 1970-01-01
相关资源
最近更新 更多