来自C#/ .NET的MQ统计监控

时间:2013-04-23 19:59:24

标签: c#-4.0 ibm-mq

我们交易MQ数据的供应商之一有一个显示以下内容的监视器:

enter image description here

我已经编写了一个我自己的C#监视器,每隔x分钟就会对队列深度进行快照,但我想知道如何获取入队和出列的消息数。在我看来,这两个统计数据具有不同的性质。对我来说,队列深度是在给定的时间点。上述报告实际上显示了5分钟的“高Q深度”。

有人可以指点我在C#/。NET MQ API指南中了解如何收集这些统计信息吗?如果没有,什么技巧或工具可以获得这些统计数据?

2 个答案:

答案 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。