【发布时间】:2010-11-06 23:53:56
【问题描述】:
需要批量清除每周一次的系统队列日志。
【问题讨论】:
需要批量清除每周一次的系统队列日志。
【问题讨论】:
系统队列的正确格式:
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("DIRECT=OS:computername\SYSTEM$;JOURNAL");
mq.Purge();
【讨论】:
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
【讨论】: