Как программно очистить журнал системной очереди MSMQ?

Необходимо выполнить еженедельную очистку журнала системной очереди.


person Community    schedule 30.06.2009    source источник


Ответы (3)


Правильный формат для системных очередей:

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++;
            }
        }
    }
}
person Chris Weber    schedule 11.05.2012

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

or

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

если это для очереди, которую вы создали. Убедитесь, что у пользователя есть правильные разрешения. См.: http://msdn.microsoft.com/en-us/library/system.messaging.messagequeue.aspx

person HasaniH    schedule 30.06.2009

Ответить здесь

MessageQueue mq = new MessageQueue("DIRECT=OS:computername\SYSTEM$;JOURNAL");
mq.Purge();
person Igal Serban    schedule 17.07.2009
comment
Правильный формат: var mq = new MessageQueue(FormatName:Direct=os:.\\System$;JOURNAL); - person Chris Weber; 12.05.2012