我们与之交易 MQ 数据的供应商之一有一个显示以下内容的监视器:
我自己编写了一个 C# 监视器,它每 x 分钟拍摄一次队列深度的快照,但我想知道如何获取入队和出队的消息数。在我看来,这两个统计数据具有不同的性质。对我来说,队列深度是在给定的时间点。上面的报告实际上显示了 5 分钟时间段的“高 Q 深度”。
有人可以指出 C#/.NET MQ API 指南中有关如何收集这些统计信息的内容吗?如果没有,有什么技巧或工具可以获得这些统计数据?
MQ .NET 在命名空间下对 PCF 有未记录的“支持” IBM.WMQ.PCF
。有类PCFAgent, PCFMessage
之类的。这些可用于读取 PCF 消息。
对于静态监控,您可以在队列上打开“队列静态”。如此处所述,队列静态消息包括诸如从队列中放置或检索的消息数量之类的信息。
示例代码:此代码向队列管理器查询名称为 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);
}
}
您看到的显示使用(名称不佳)重置队列统计信息PCF 命令。我将其称为 WMQ 的“量子命令”,因为观察值的行为会改变值。
我看到 .Net 手册将 PCF 的值记录为消息格式。但是我对 .Net 类并不是很熟悉,也不知道它们是否原生支持 PCF,或者您是否必须拼凑一些东西。(也许沙市会回应。)
因为查询队列统计信息会将它们重置为零,所以如果不止一件事情在进行这些查询,您会得到不可预测的结果。我通常推荐的是让后台任务执行查询并保存数据。然后表示层查询数据库以获取统计信息,而不是直接查询 QMgr。