从java代码获取队列深度

时间:2011-12-28 20:37:49

标签: java jms ibm-mq

任何人都可以帮助在java中获取获取队列深度的代码。我们在IBM WebSphere MQ中有4个队列,其中有消息。

我想在运行报告时编写一个jsp来读取队列名称及其深度。我怎么做? 任何人都可以帮助获得完整的解决方案因为我不知道该怎么做

3 个答案:

答案 0 :(得分:4)

我认为没有办法使用JMS检索队列深度。但是,您可以使用MQ Series特定的Java API来检索此信息。这是示例代码。请注意int openOptions = MQC.MQOO_INQUIRE;

以下是reference guide

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