java-MQ的管理

來源:互聯網
上載者:User

    應用使用了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 ("134.175.7.84", 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 ("134.175.7.84", 14146, "SYSTEM.ADMIN.SVRCONN");

  最後附上IBM工程師給My Code,很簡單,但是好在有關鍵的註解:

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.