我们交易MQ数据的供应商之一有一个显示以下内容的监视器:
我已经编写了一个我自己的C#监视器,每隔x分钟就会对队列深度进行快照,但我想知道如何获取入队和出列的消息数。在我看来,这两个统计数据具有不同的性质。对我来说,队列深度是在给定的时间点。上述报告实际上显示了5分钟的“高Q深度”。
有人可以指点我在C#/。NET MQ API指南中了解如何收集这些统计信息吗?如果没有,什么技巧或工具可以获得这些统计数据?
答案 0 :(得分:3)
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);
}
}
答案 1 :(得分:1)
您看到的显示器使用(名称不详)Reset Queue Statistics PCF命令。我将此称为WMQ的“量子命令”,因为观察值的行为会改变值。
我看到.Net手册将PCF的值记录为消息格式。但我对.Net类并不十分熟悉,也不知道它们是否原生支持PCF,或者你是否需要拼凑一些东西。 (也许Shashi会回应。)
因为查询队列统计信息将它们重置为零,所以如果进行这些查询不止一件事,就会得到不可预测的结果。我通常建议的是让后台任务执行查询并保存数据。然后表示层在数据库中查询统计信息,而不是直接查询QMgr。