zoukankan      html  css  js  c++  java
  • javaMQ的管理

        应用使用了MQ,但MQ没有一个合适的监控页面,监控手段比较匮乏,上周六出现了一次故障,当时如果有对MQ的监控手段,是能够及时发现问题,并防止故障的。在此之前就已经想自己写一个程序来监视MQ中的队列深度,以此来判断系统是否在干活。只是根据网上的资料一直都没能成功的获取MQ队列的深度,尽管这个功能是一段很简单代码,直到今天,从IBM的工程师那的到的一段代码,帮助我找到了之前的错误所在。

        首先是要对MQ有个基本的了解,理解一些基本概念(我就是对一些基本概念理解不熟练导致一些参数写错了),然后就是看下面这个帖子:

        MQ系统管理编程概述

      这里对MQ的管理编程讲解得很到位,附的代码也很详尽。我采用的是PCF的方式。我仅仅需要完成对队列深度的获取,需要到IBM网站上下载一个lib,MS0b.zip文件,有一个com.ibm.mq.pcf-6.1.jar。相关代码如下:

     1 PCFMessageAgent    agent;
     2 PCFMessage     request;
     3 PCFMessage []     responses;
     4 // Connect a PCFAgent to the specified queue manager
     5 agent = new PCFMessageAgent ("IP"14146"SYSTEM.ADMIN.SVRCONN");
     6 // Build the request
     7 request = new PCFMessage (CMQCFC.MQCMD_INQUIRE_Q);
     8 request.addParameter (CMQC.MQCA_Q_NAME, "*");
     9 request.addParameter (CMQC.MQIA_Q_TYPE, CMQC.MQQT_LOCAL);
    10 request.addParameter (CMQCFC.MQIACF_Q_ATTRS, 
    11 new int [] { CMQC.MQCA_Q_NAME, CMQC.MQIA_CURRENT_Q_DEPTH });
    12 // Use the agent to send the request
    13 responses = agent.send (request);
    14 // Display the results
    15 for (int i = 0; i < responses.length; i++)
    16 {
    17   String name = responses [i].getStringParameterValue (CMQC.MQCA_Q_NAME);
    18   int depth = responses [i].getIntParameterValue (CMQC.MQIA_CURRENT_Q_DEPTH);
    19 }
    20 // Disconnect
    21 agent.disconnect ();

       我弄错的代码主要是PCFMessageAgent ("IP", 14146, "SYSTEM.ADMIN.SVRCONN");

      最后附上IBM工程师给我的代码,很简单,但是好在有关键的注解:

    MQEnvironment.CCSID = 1381;         //要与队列管理器的一样                    
    MQEnvironment.hostname = "localhost";          // 队列管理器所在的机器名,要能ping通
    MQEnvironment.port = 1414;                          // 队列管理器的监听端口
    MQEnvironment.channel  = "CHTEST";  
    MQQueueManager qmgr=new MQQueueManager("TESTQM");   //队列管理器名称
    MQQueue queue = qmgr.accessQueue("QTEST",MQC.MQOO_INPUT_AS_Q_DEF);  //队列
    MQMessage  theMessage     = new MQMessage();
    MQGetMessageOptions gmo = new MQGetMessageOptions();
    queue.get(theMessage,gmo);
    //System.out.println("the message length is:"+theMessage.getDataLength());
    //int i=theMessage.getDataLength();
    System.out.println("the message is:"+theMessage.readLine());
    queue.close();
    qmgr.disconnect();

  • 相关阅读:
    HTMLTestRunner下载生成报告
    python+selenium+chromewebdriver或Firefox的环境搭建
    unittest单元测试(简单算法题)
    APP测试功能点大全
    selenium元素定位
    博弈问题dp模版
    位运算基本操作
    素数模版
    二分查找模版
    计算机网络重要知识点
  • 原文地址:https://www.cnblogs.com/badwood316/p/1398314.html
Copyright © 2011-2022 走看看