How to purge a MSMQ system queue journal programatically?

拈花ヽ惹草 提交于 2019-12-01 03:23:10

问题


Need to batch a weekly purge of the System queue journal.


回答1:


The correct format for system queues:

FormatName:Direct=os:.\\System$;JOURNAL

I've tested this format on Windows 7 and Windows 2003.

(the dot after os: means the localhost/local computer)

var systemJournalQueue = new MessageQueue("FormatName:Direct=os:.\\System$;JOURNAL");
var systemDeadLetterQueue = new MessageQueue("FormatName:Direct=os:.\\System$;DEADLETTER");
var systemDeadXLetterQueue =new MessageQueue("FormatName:Direct=os:.\\System$;DEADXACT"));

systemJournalQueue.Purge();

or if you want to keep N days of messages you can do this:

private static void PurgeQueues(int archiveAfterHowManyDays, MessageQueue queue)
{
    queue.Formatter = new XmlMessageFormatter(new Type[] { typeof(System.String) });
    queue.MessageReadPropertyFilter.ArrivedTime = true;

    using (MessageEnumerator messageReader = queue.GetMessageEnumerator2())
    {
        int counter = 0;
        while (messageReader.MoveNext())
        {
            Message m = messageReader.Current;
            if (m.ArrivedTime.AddDays(archiveAfterHowManyDays) < DateTime.Now)
            {
                queue.ReceiveById(m.Id);
                counter++;
            }
        }
    }
}



回答2:


MessageQueue mq = new MessageQueue(".\\Journal$");
mq.Purge();

or

MessageQueue mq = new MessageQueue(".\\myQueue\\Journal$");
mq.Purge();

if its for a queue you created. Make sure the user has the correct permissions. See: http://msdn.microsoft.com/en-us/library/system.messaging.messagequeue.aspx




回答3:


Answerd here

MessageQueue mq = new MessageQueue("DIRECT=OS:computername\SYSTEM$;JOURNAL");
mq.Purge();


来源:https://stackoverflow.com/questions/1063378/how-to-purge-a-msmq-system-queue-journal-programatically

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!