繁体   English   中英

Websphere 7 MQueue:如何从Java访问队列深度?

[英]Websphere 7 MQueue: how to access queue depth from Java?

我想编写一些代码来监视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一起工作。

谢谢Jeff Porter

我使用了WS 7.0.1.1中的jar

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

希望这可以帮助其他人!

如果你想要一些适用于SIBus和MQ实现的东西,你最好坚持使用JMS 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++;
}

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM