簡體   English   中英

如何以編程方式清除MSMQ系統隊列日志?

[英]How to purge a MSMQ system queue journal programatically?

需要批量每周清除系統隊列日志。

系統隊列的正確格式:

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

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

或者如果你想保留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++;
            }
        }
    }
}
MessageQueue mq = new MessageQueue(".\\Journal$");
mq.Purge();

要么

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

如果它是你創建的隊列。 確保用戶具有正確的權限。 請參閱: http//msdn.microsoft.com/en-us/library/system.messaging.messagequeue.aspx

在這里回答

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM