пятница, 11 ноября 2011 г.

как узнать, сколько сообщений находится в MSMQ?

Задача: необходимо узнать, сколько сообщений находится в очереди сообщений MSMQ, не получая эти сообщения. Также необходимо определить, какое место в очереди занимает заданное сообщение.

У меня получилось так:

int num = 0;
if (MessageQueue.Exists("path to your queue"))
{
MessageQueue mq = new MessageQueue("path to your queue", QueueAccessMode.Peek);
var messages = mq.GetMessageEnumerator2();
while (messages.MoveNext())
{
num++;
}
}

В конструкторе MessageQueue() обязательно указываем метод доступа к очереди Peek, который не удаляет сообщения из очереди.
Если необходимо узнать, какое место в очереди занимает наше сообщение, добавляем сравнение поля Label очереди в цикл while.

while (messages.MoveNext())
{
if (messages.Current.Label != "someCustomLabel")
num++;
else
break;
}