2016-04-23 60 views
2

有沒有辦法編寫PCF程序來獲取處於「正在運行」狀態的羣集發送者/接收者通道的通道狀態?
我有這樣的東西,只給我一個頻道的頻道狀態!如何編寫PCF命令以獲取條件的通道狀態?

// send the request and collect the responses 
    String checkStatus=""; 
    String channelName =""; 
// build a request 
    request = new PCFMessage(CMQCFC.MQCMD_INQUIRE_CHANNEL_STATUS); 
// add a parameter designating the name of the channel for which status is requested 
    request.addParameter(CMQCFC.MQCACH_CHANNEL_NAME, "TO.*"); 
// add a parameter designating the instance type (current) desired 
    request.addParameter(CMQCFC.MQIACH_CHANNEL_INSTANCE_TYPE, CMQC.MQOT_CURRENT_CHANNEL); 

    responses = agent.send(request); 
    for (int j = 0; j < responses.length; j++) { 
     // get the channel name and trim the spaces 
     String temp =""; 
     temp = responses[j].getStringParameterValue(CMQCFC.MQCACH_CHANNEL_NAME); 
     channelName = temp.trim(); 

     int chlStatus = responses[j].getIntParameterValue(CMQCFC.MQIACH_CHANNEL_STATUS); 
     //System.out.println("channel status: " + chlStatus); 
     String[] chStatusText = { 
      "", "MQCHS_BINDING", "MQCHS_STARTING", "MQCHS_RUNNING", 
       "MQCHS_STOPPING", "MQCHS_RETRYING", "MQCHS_STOPPED", 
       "MQCHS_REQUESTING", "MQCHS_PAUSED", 
       "", "", "", "", "MQCHS_INITIALIZING" 
     }; 
     checkStatus = chStatusText[chlStatus]; 
     //System.out.println("channel status: " + checkStatus); 
    } 
    System.out.println("chl: " + channelName + " STATUS: " + checkStatus + ")"); 

上面的代碼給出了只有一個通道而不是所有通道的通道狀態。這裏有什麼問題?

+0

您是否在問如何將您返回的整數轉換爲運行(或其他狀態),或者您在問如何從通道狀態記錄中獲取其他信息以及運行狀態? –

+0

基本上我想寫一個對應於下面的runmqsc dis chs(TO。*)的PCF命令,其中(STATUS eq RUNNING) – sijo0703

回答

3

代碼中的PCF部分看起來不錯,但打印出來的結果是錯誤的代碼。

responses = agent.send(request); 
for (int j = 0; j < responses.length; j++) { 
    : 
    : 
    checkStatus = chStatusText[chlStatus]; 
} 
System.out.println("chl: " + channelName + " STATUS: " + checkStatus + ")"); 

你有一個for循環兜兜所有的答覆,但隨後的println是for循環外部,所以只打印出的最終響應的結果。

+1

謝謝!我想我需要更多的睡眠:) – sijo0703

+0

我有2個頻道。它適用於連接到隊列管理器的服務器連接通道。對於其他通道,失敗的原因如下:AMQ9502:通道類型不適合請求的操作。 說明: 請求的操作無法在通道'remote.local'上執行。某些 操作僅對某些通道類型有效。此頻道是 'RECEIVER'頻道類型。例如,您只能從發起端ping通或觸發通道 。 – itsraja

+0

你已經在關於顯示頻道的問題上附加了你的評論。你是說當你試圖展示一個頻道時,你會得到這個錯誤?你所說的只是「它有效......」你不會說「它」是什麼。建議你可能想開始一個新問題,而不是在這個問題的最後添加標籤,如果你正在做一些不同的事情? –

1

去搶我的開源項目MQ Channel Monitor。下載源代碼並查看'PCFChlStatus.java'文件。有一個名爲getMCAStatus()的方法,它基本上就是你所追求的。

相關問題