Вопрос по .net – Как очистить журнал очереди системы MSMQ программно?

5

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

Ваш Ответ

3   ответа
5

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

1

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

DIRECT=OS:computername\SYSTEM$;JOURNAL");
mq.Purge();
Правильный формат: var mq = new MessageQueue (& quot; FormatName: Direct = os:. \\ System $; JOURNAL & quot;);

Похожие вопросы