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)

                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();
        MessageQueue newQueue = new MessageQueue(queuePath, false, true, QueueAccessMode.Peek);
        newQueue.MessageReadPropertyFilter = propFilter;

        if(newQueue.GetAllMessages().Length > 0)

Comments (0)

Skip to main content