c#消息消息队列计数。 - 因排队已开放而导致共享违规导致独占接收

时间:2017-08-15 07:15:46

标签: c# message-queue message

所以我正忙着在我的一台服务器上安装一个Watchdog for message queue。我有一个正在侦听队列并处理消息的应用程序(第三方)。我现在想要对它进行计数,如果消息达到示例1500,我发送电子邮件。所以我的所有代码都有效,除了我需要关闭第三方应用程序以使用消息队列。我所做的是获取所有存在的队列名称。工作正常。

public void GetPrivateQueues()
{
    MessageQueue[] QueueList =
    MessageQueue.GetPrivateQueuesByMachine(".");

    foreach (MessageQueue queueItem in QueueList)
    {
        i++;

        myPrivateQueues.Add(queueItem.Path);

        Count(queueItem.Path);
    }

    return;
}

所以,当我像这样计算队列时

public void Count(String path)
{

    MessageQueue queue = new MessageQueue(path);
    MessageEnumerator messageEnumerator = queue.GetMessageEnumerator2();
    int iii = 0;
    while (messageEnumerator.MoveNext())
    {
       iii++;
    }

    myPrivateQueuesCount.Add(iii);
    return;//i;
}

我收到了错误。

  

System.Messaging.MessageQueueException(0x80004005):队列被打开已导致独占接收导致共享冲突。

如何在不尝试获取独占访问权限的情况下读取队列进行计数。我只需要数数吧。

谢谢

此致

1 个答案:

答案 0 :(得分:0)

我使用性能计数器来读取队列。 现在像个梦一样工作!

添加了catch异常。这是在队列为空时。我写了一个0.性能计数器给出了空白队列的错误。

       public void Count(String path)
    {

            path = path.Remove(0, 21);

        try
       {
            PerformanceCounter queueCounter = new PerformanceCounter(
             "MSMQ Queue",
             "Messages in Queue",
            @path);


            Console.WriteLine("Queue contains {0} messages",
                queueCounter.NextValue().ToString());
            myPrivateQueuesCount.Add((int)queueCounter.NextValue());

        }
        catch (Exception exc)
        {
            myPrivateQueuesCount.Add(0);
        }

        return;
    }