3

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

在此处输入图像描述

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

有人可以指出 C#/.NET MQ API 指南中有关如何收集这些统计信息的内容吗?如果没有,有什么技巧或工具可以获得这些统计数据?

4

2 回答 2

3

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);
        }
    }
于 2013-04-24T05:23:12.940 回答
1

您看到的显示使用(名称不佳)重置队列统计信息PCF 命令。我将其称为 WMQ 的“量子命令”,因为观察值的行为会改变值。

我看到 .Net 手册将 PCF 的值记录为消息格式。但是我对 .Net 类并不是很熟悉,也不知道它们是否原生支持 PCF,或者您是否必须拼凑一些东西。(也许沙市会回应。)

因为查询队列统计信息会将它们重置为零,所以如果不止一件事情在进行这些查询,您会得到不可预测的结果。我通常推荐的是让后台任务执行查询并保存数据。然后表示层查询数据库以获取统计信息,而不是直接查询 QMgr。

于 2013-04-23T23:55:23.937 回答