Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to Purge an MSMQ Outgoing Queue

Tags:

msmq

Is there any way to purge an outgoing queue. It doesn't appear that I can do it with the MMC snap-in and when i try to purge it in code i get an error Format name is invalid the computer it's sending the messages to does not exist, so they will never be sent, however the queues filled up the max storage space for MSMQ so everytime my application tries to send another message i get the insufficient resources exception.

I've tried the following formats and they all fail with the exception format name is invalid

DIRECT=OS:COMPUTER\private$\queuename
OS:COMPUTER\private$\queuename
COMPUTER\private$\queuename

like image 745
Brian Avatar asked Jan 26 '11 17:01

Brian


3 Answers

You should be able to purge it manually from the MMC snap-in. MSMQ gets very stingy when it reaches its storage limits, so a lot of operations will fail with "permission denied" and things like that.

The long-term solution obviously is to modify the configuration so there is enough storage space for your particular usage patterns.

Edit: You might be running into a limitation in the managed API related to admin capabilities and remote queues. Take a look at this article by Ingo Rammer. It even includes a p-invoke example.

like image 110
kprobst Avatar answered Oct 17 '22 16:10

kprobst


it is possible use managed code to purge an outgoing queue:

using (var msgQueue = new MessageQueue(GetPrivateMqPath(queueName, remoteIP), QueueAccessMode.ReceiveAndAdmin))
{
    msgQueue.Purge();
}

in which GetPrivateMqPath is:

if (!string.IsNullOrEmpty(remoteIP))
    return String.Format("FORMATNAME:DIRECT=TCP:{0}\\private$\\{1}", remoteIP, queueName);
else
    return @".\private$\" + queueName;

QueueAccessMode.ReceiveAndAdmin points to outgoing queue.

like image 26
Daniel B Avatar answered Oct 17 '22 18:10

Daniel B


You could try FORMATNAME:DIRECT=OS:computer\PRIVATE$\queuename.

like image 1
Filburt Avatar answered Oct 17 '22 18:10

Filburt