一個我們貿易MQ數據的廠商都有監視器,顯示如下:MQ統計C#監視/ NET
我寫我自己的C#監視器需要每隔x分鐘就有一個隊列深度的快照,但我想知道如何獲取消息隊列和隊列的出隊數量。這兩個數據在我看來是不同的。對我來說,隊列深度是在給定的時間點。上面的報告實際上顯示了5分鐘的「高Q深度」。
有人能指點我在C#/ .NET MQ API指南中有關如何收集這些統計信息的內容嗎?如果沒有,有什麼技巧或工具可以獲得這些數據?
一個我們貿易MQ數據的廠商都有監視器,顯示如下:MQ統計C#監視/ NET
我寫我自己的C#監視器需要每隔x分鐘就有一個隊列深度的快照,但我想知道如何獲取消息隊列和隊列的出隊數量。這兩個數據在我看來是不同的。對我來說,隊列深度是在給定的時間點。上面的報告實際上顯示了5分鐘的「高Q深度」。
有人能指點我在C#/ .NET MQ API指南中有關如何收集這些統計信息的內容嗎?如果沒有,有什麼技巧或工具可以獲得這些數據?
MQ .NET在IBM.WMQ.PCF
命名空間下對PCF沒有記錄「支持」。有類似PCFAgent, PCFMessage
等。這些可用於讀取PCF消息。
對於靜態監視,您可以在隊列上打開「隊列靜態」。如所述here隊列靜態消息包括諸如從隊列中放入或檢索的消息的數量之類的信息。
示例代碼:此代碼向隊列管理器查詢名爲Q1的隊列。
public void InquireQmgr()
{
try
{
PCFMessageAgent messageAgent = new PCFMessageAgent("QM");
PCFMessage pcfMsg = new PCFMessage(MQC.MQCMD_INQUIRE_Q);
pcfMsg.AddParameter(MQC.MQCA_Q_NAME, "Q1");
PCFMessage[] pcfResponse = messageAgent.Send(pcfMsg);
int pcfResponseLen = pcfResponse.Length;
for (int pcfResponseIdx = 0; pcfResponseIdx < pcfResponseLen; pcfResponseIdx++)
{
PCFParameter [] parameters = pcfResponse[pcfResponseIdx].GetParameters();
foreach(PCFParameter pm in parameters)
{
Console.WriteLine(pm.Parameter + " - " + pm.GetValue());
}
}
messageAgent.Disconnect();
}
catch(MQException ex)
{
Console.Write(ex);
}
}
您看到的顯示器使用(命名不明)Reset Queue Statistics PCF命令。我把這稱爲WMQ的「量子命令」,因爲觀察值的行爲改變了值。
我看到.Net手冊將PCF的值記錄爲消息格式。但我對.Net類並不熟悉,也不知道他們是否本身支持PCF,或者你是否需要拼湊一些東西。 (也許Shashi會迴應。)
因爲對隊列統計信息的查詢會將它們重置爲零,如果有多個事件正在進行這些查詢,將會得到不可預知的結果。我通常建議的是有一個後臺任務執行查詢並保存數據。然後表示層查詢數據庫的統計數據,而不是直接查詢QMgr。
謝謝,這看起來會很有用。 – NealWalters 2013-04-25 15:04:16