Search code examples
c#msmq

Message queue looping


I have a console app in c# and I am trying to receive a message from a message queue until the message queue is empty. So something like,

MessageQueue queue = new MessageQueue();
While(queue.notempty)
{
    queue.receive(...)
}

How can I do this?

Thanks.


Solution

  • There is no way to check whether queue is empty or not. You have to receive it this way:

    private Message Receive(MessageQueue queue)
    {
       try 
       {
          return queue.Receive(TimeSpan.Zero);
       }
       catch (MessageQueueException mqe)
       {
          if (mqe.MessageQueueErrorCode == MessageQueueErrorCode.IOTimeout)
             return null;
          throw;
       }
    }
    

    then you can do

    MessageQueue queue = new MessageQueue();
    Message msg;
    while( (msg = Receive(queue)) != null)
    {
        //process
    }