如何以编程方式清除MSMQ系统队列日志?

5 .net logging msmq

需要批量每周清除系统队列日志.

Chr*_*ber 5

系统队列的正确格式:

FormatName:Direct=os:.\\System$;JOURNAL
Run Code Online (Sandbox Code Playgroud)

我在Windows 7和Windows 2003上测试过这种格式.

(os之后的点:表示本地主机/本地计算机)

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();
Run Code Online (Sandbox Code Playgroud)

或者如果你想保留N天的消息,你可以这样做:

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++;
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Has*_*niH 2

MessageQueue mq = new MessageQueue(".\\Journal$");
mq.Purge();
Run Code Online (Sandbox Code Playgroud)

或者

MessageQueue mq = new MessageQueue(".\\myQueue\\Journal$");
mq.Purge();
Run Code Online (Sandbox Code Playgroud)

如果它用于您创建的队列。确保用户拥有正确的权限。请参阅: http ://msdn.microsoft.com/en-us/library/system.messaging.messagequeue.aspx