首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WebSphere7Java:如何从MQueue访问队列深度?

WebSphere7Java:如何从MQueue访问队列深度?
EN

Stack Overflow用户
提问于 2011-10-14 03:02:54
回答 3查看 17.3K关注 0票数 2

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

代码语言:javascript
运行
复制
   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();

我如何知道"Channel“是什么?

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

或者有没有其他我应该考虑的API?

我需要它与WRS 7 SIB和MQ一起工作。

谢谢Jeff Porter

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-14 17:58:34

我使用的是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“(树中的客户端连接节点)获得了Queue Manager名称和Channel名称

代码语言:javascript
运行
复制
    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();

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

票数 6
EN

Stack Overflow用户

发布于 2011-10-14 20:55:08

如果您想要同时适用于SIBus和MQ实现的东西,最好还是使用JMS (因为它们也可以移植到其他JMS实现)。

所以我要做的是:

代码语言:javascript
运行
复制
//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
EN

Stack Overflow用户

发布于 2013-12-01 15:44:45

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

代码语言:javascript
运行
复制
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;
     }
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7759113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档