【问题标题】:Websphere 7 MQueue: how to access queue depth from Java?Websphere 7 MQueue:如何从 Java 访问队列深度?
【发布时间】:2013-12-01 15:44:45
【问题描述】:

我想编写一些代码来监控 Websphere 7 MQ 上的队列大小。 这是我想出的代码

   MQEnvironment.hostname = "10.21.1.19"; 
   MQEnvironment.port = 1414;
   MQEnvironment.channel = "SYSTEM.CDEF.SVRCONN";
   MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES);

   MQQueueManager qMgr = new MQQueueManager("MYQMGR");

   MQQueue destQueue = qMgr.accessQueue("PUBLISH", MQC.MQOO_INQUIRE);
   System.out.println(destQueue.getCurrentDepth());
   destQueue.close();
   qMgr.disconnect();

我怎么知道“频道”是什么?

我如何知道传递给 MQQueueManager 的队列管理器名称是什么?

或者我应该看看其他 API 吗?

我需要它与 WRS 7 SIB 和 MQ 一起使用。

谢谢 杰夫·波特

【问题讨论】:

    标签: java websphere messaging ibm-mq


    【解决方案1】:

    我使用了 WS 7.0.1.1 中的 jars

    com.ibm.mq.jar com.ibm.mq.jmqi.jar com.ibm.mq.jmqi.system.jar com.ibm.mq.commonservices.jar com.ibm.mq.headers..jar com.ibm.mq.jmqi.remote.jar

    我从“IBM Webshpere MQ Explorer”(树中的客户端连接节点)获得了队列管理器名称和通道名称

        import com.ibm.mq.MQEnvironment;
        import com.ibm.mq.MQQueue;
        import com.ibm.mq.MQQueueManager;
        import com.ibm.mq.constants.CMQC;
        int openOptions = CMQC.MQOO_INQUIRE + CMQC.MQOO_FAIL_IF_QUIESCING + CMQC.MQOO_INPUT_SHARED;
    
        MQEnvironment.hostname = "10.2.51.19";
        MQEnvironment.port = 1414;
        MQEnvironment.channel = "SW1_QM_CH1";
    
        MQQueueManager qMgr = new MQQueueManager("SW1_QM");
    
        MQQueue destQueue = qMgr.accessQueue("E_RETRY",   openOptions);
        System.out.println("E_RETRY size:" + destQueue.getCurrentDepth());
        destQueue.close();
        qMgr.disconnect();
    

    希望这对其他人有所帮助!

    【讨论】:

      【解决方案2】:

      如果您想要一些适用于 SIBus 和 MQ 实现的东西,您最好坚持使用 JMS API(因为这些 API 也可以移植到 JMS 的其他实现中)。

      所以我要做的是:

      //ctx is InitialContext
      ConnectionFactory cf = (ConnectionFactory) ctx.lookup("jms/CF");
      Connection conn = cf.createConnection();
      conn.start();
      
      Session session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
      Queue queue = (Queue) ctx.lookup("jms/MyQueue");
      QueueBrowser qb = session.createBrowser(queue);
      
      //sadly, getting this enum is the best the JMS API can offer.
      //but the upside is the code is portable AND it can run over MQ and SIBus
      //implementations.
      Enumeration queueMessageEnum = qb.getEnumeration();
      int count = 0;
      while(queueMessageEnum.hasMoreElements()) {
        queueMessageEnum.nextElement();
        count++;
      }
      

      【讨论】:

        【解决方案3】:

        这是另一种方式;我使用了 WS 7.0.1.1 中的罐子。

        import com.ibm.mq.constants.CMQC;
        import com.ibm.mq.constants.CMQCFC;
        import com.ibm.mq.pcf.MQCFH;
        import com.ibm.mq.pcf.PCFAgent;
        import com.ibm.mq.pcf.PCFParameter;
        
        
        PCFAgent agentNode = new PCFAgent(HOST_NAME, PORT, CHANNEL_NAME);
        
        MQCFH cfh = new MQCFH(agentNode.send(CMQCFC.MQCMD_INQUIRE_Q, {new MQCFST(CMQC.MQCA_Q_NAME, QUEUE_NAME)})[0]);
        
        PCFParameter p;
        
        if (cfh.reason == 0) {
          for (int i = 0; i < cfh.parameterCount; i++) {
             p = PCFParameter.nextParameter(responses[0]);
             int parm = p.getParameter();
             switch (parm) {
                 case CMQC.MQIA_CURRENT_Q_DEPTH:
                      currentDepth = (Integer) p.getValue();
                      break;
                 case CMQC.MQIA_MAX_Q_DEPTH:
                      maximumDepth = (Integer) p.getValue();
                      break;
             }
          }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-12-16
          • 2012-07-16
          • 2012-01-29
          • 1970-01-01
          • 1970-01-01
          • 2021-05-15
          • 2017-04-14
          相关资源
          最近更新 更多