如何清除MSMQ系统队列日志编程?队列、系统、日志、MSMQ

2023-09-03 05:11:53 作者:死在回忆里

需要批量的系统队列日志每周清洗。

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

推荐答案

有关系统队列的正确格式为:

The correct format for system queues:

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

我已经在Windows 7和Windows 2003中测试这种格式。

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

(OS后点:指本地主机/本地计算机)

(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();

如果你想保持N天的邮件,你可以这样做:

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++;
            }
        }
    }
}