我想编写一些代码来监控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一起使用。
由于 杰夫波特
答案 0 :(得分:5)
我使用了WS 7.0.1.1
中的jarcom.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();
希望这可以帮助其他人!
答案 1 :(得分:3)
如果你想要适用于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++;
}
答案 2 :(得分:0)
这是另一种方式;我使用了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;
}
}
}