Websphere 7 MQueue:如何从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; } } }