任何人都可以帮助在java中获取获取队列深度的代码。我们在IBM WebSphere MQ中有4个队列,其中有消息。
我想在运行报告时编写一个jsp来读取队列名称及其深度。我怎么做? 任何人都可以帮助获得完整的解决方案因为我不知道该怎么做
答案 0 :(得分:4)
我认为没有办法使用JMS检索队列深度。但是,您可以使用MQ Series特定的Java API来检索此信息。这是示例代码。请注意int openOptions = MQC.MQOO_INQUIRE;
int depth = 0;
MQQueueManager qMgr; // define a queue manager object
String mqHost = "";
String mqPort = "";
String mqChannel = "";
String mqQMgr = "";
String mqQueue = "";
try {
// Set up MQSeries environment
MQEnvironment.hostname = mqHost;
MQEnvironment.port = Integer.valueOf(mqPort).intValue();
MQEnvironment.channel = mqChannel;
MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY,
MQC.TRANSPORT_MQSERIES);
qMgr = new MQQueueManager(mqQMgr);
int openOptions = MQC.MQOO_INQUIRE;
MQQueue destQueue = qMgr.accessQueue(mqQueue, openOptions);
depth = destQueue.getCurrentDepth();
destQueue.close();
qMgr.disconnect();
} catch (Exception err) {
err.printStackTrace();
}
答案 1 :(得分:0)
如果从IBM下载安装WMQ客户端(而不是从QMgr安装中获取类库),则会获得示例代码。提供的示例包括几个列出队列名称,查询对象属性和创建对象的示例。在Win 7的默认安装中,可以在C:\Program Files (x86)\IBM\WebSphere MQ\tools\pcf\samples
找到它们。
在此处下载WMQ客户端库:
强烈建议您使用最新的WMQ客户端进行任何新开发。它适用于目标QMgr提供的任何功能级别的所有WMQ早期版本。请参阅信息中心的Compatibility & Interop statement。您可以从WMQ Library landing page找到您正在使用的WMQ版服务器或客户端的信息中心。
答案 2 :(得分:0)
其中一些功能在IIB中被折旧,所以我粘贴了更新的代码。它有效:)
享受
从Java获取MQ队列深度:
try {
int depth = 0;
MQQueueManager qMgr; // define a queue manager object
String mqHost = "";
String mqPort = "";
String mqChannel = "";
String mqQMgr = "";
String mqQueue = "";
try {
// Set up MQSeries environment
MQEnvironment.hostname = mqHost;
MQEnvironment.port = Integer.valueOf(mqPort).intValue();
MQEnvironment.channel = mqChannel;
//MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY,MQC.TRANSPORT_MQSERIES);
qMgr = new MQQueueManager(mqQMgr);
//int openOptions = 1;//MQC.MQOO_INQUIRE;
int openOptions = CMQC.MQOO_INQUIRE + CMQC.MQOO_FAIL_IF_QUIESCING + CMQC.MQOO_INPUT_SHARED;
MQQueue destQueue = qMgr.accessQueue(mqQueue, openOptions);
depth = destQueue.getCurrentDepth();
destQueue.close();
qMgr.disconnect();
MbMessage outMessage = new MbMessage();
outAssembly = new MbMessageAssembly(inAssembly, outMessage);
MbElement root = outMessage.getRootElement();
MbElement outXmlRoot = root.createElementAsLastChild(MbXMLNSC.PARSER_NAME);
MbElement Appointment = outXmlRoot.createElementAsLastChild(MbElement.TYPE_NAME, "RootElementXMLName", null);
Appointment.createElementAsLastChild(MbElement.TYPE_NAME_VALUE, "Q_DepthFromServer", depth);
out.propagate(outAssembly);
}