1

我安装了一个 Windows servive,它是一个 MSMQ 侦听器。我需要以编程方式为非事务响应 quque 获取 MSMQ 统计计数器。

4

2 回答 2

0

这是您从中获取消息队列计数的代码,您只需要传递您想要 msmq 计数的队列的名称。

    //Here QueueName is Pass from Calling Function for which you want count of messages.
    Public MessageCount(string QueueName)
    {           
        int messageCount = 0;
        try
        {
            string fullyQualifiedQueueName = string.Format(@"{0}\{1}", Environment.MachineName, QueueName);
            PerformanceCounterCategory category = new PerformanceCounterCategory("MSMQ Queue");
            PerformanceCounter cntr = new PerformanceCounter("MSMQ Queue", "Messages in Queue");
            if (category.InstanceExists(fullyQualifiedQueueName.ToLower()))
            {
                cntr.InstanceName = fullyQualifiedQueueName.ToLower(CultureInfo.CurrentCulture);
                messageCount = (int)cntr.NextValue();
            }
            ((IDisposable)cntr).Dispose();
            Console.WriteLine("Message Count is {0}", messageCount.Tostring());
        }
        Catch(Exeption Ex)
        {
             Console.WriteLine("Error : {0}",Ex.Message);
        }
    }
于 2014-07-21T10:45:57.940 回答
0

您可能想查看Performance Counters

我还没有使用 MSMQ 的性能计数器,但我确实将它们用于其他事情,例如 CPU 负载。进入并不难。

(来自下面的第一篇链接文章)

MSMQ 性能计数器从第一天开始就是 MSMQ 的一部分。[...] 性能计数器很容易通过 WMI 接口接近,而且许多监控工具都与它们交互。但是,当使用 perf. 计数器您无法获得最新数据,并且它们并不总是准确的,尤其是在查看远程机器时。

这里有几篇文章可以帮助您入门:

第一篇文章还提到了我还没有使用过的MSMQ Admin API 。所以我个人不能给出任何建议:

MSMQ Admin API 是随 NT4 SP6a 引入的(因此您可能拥有它们……)但是直到 MSMQ 3.0(WXP 或 W2003)才提供它们的 COM 接口。如果您有 WinNT 或 Win2K,则必须使用 C API。另一方面,来自 MSMQ Admin API 的结果更加最新和可靠。

于 2013-02-08T12:19:18.670 回答