Checking MSMQ message queue count with C#
I noticed the other day a team member was having exceptions being thrown every second when idle in a service. Digging deeper it was revealed that the MSMQ Distributor has some code that peeks into a queue to determine if to process messages in the Enterprise Library logging framework. I devised I think a better way to check for the number of messages and then process. What do you think or do you have a better way?
Snippet of offending code (generates exception when queue is empty)
try
{
using (MessageQueue msmq = CreateMessageQueue())
{
msmq.Peek(new TimeSpan(0));
}
}
catch (MessageQueueException e)
{
if (e.MessageQueueErrorCode == MessageQueueErrorCode.IOTimeout)
{
empty = true;
}
}
A Better Way?
// Set the filter to only retrieve no major attributes or body
MessagePropertyFilter propFilter = new MessagePropertyFilter();
propFilter.ClearAll();
MessageQueue newQueue = new MessageQueue(queuePath, false, true, QueueAccessMode.Peek);
newQueue.MessageReadPropertyFilter = propFilter;
if(newQueue.GetAllMessages().Length > 0)
...