如何以编程方式检索msmq统计计数器?

时间:2013-02-06 20:15:36

标签: msmq

我安装了一个MSMQ侦听器的Windows服务。我需要以编程方式为非事务响应队列获取MSMQ统计计数器。

2 个答案:

答案 0 :(得分:0)

您可能希望查看效果计数器

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

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

  

自第1天起,MSMQ表现计数器成为MSMQ的一部分。[...]   性能计数器很容易接近   通过WMI接口,以及许多监控工具与它们接口   无论如何。但是,使用perf时。计数器你没有得到最多   最新的数据并不总是准确的,特别是在   看远程机器。

以下是一些可以帮助您入门的文章:

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

  

MSMQ Admin API随NT4 SP6a一起推出(所以你可能有   它们......)然而,直到MSMQ 3.0才提供它们的COM接口   (WXP或W2003)。如果你有WinNT或Win2K,你将不得不使用C   蜜蜂。另一方面,MSMQ Admin API的结果更多   当前可靠。

答案 1 :(得分: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);
        }
    }