NServiceBus:如何从错误队列中移动消息

时间:2010-12-14 17:47:58

标签: msmq nservicebus

我的应用程序中有一个错误导致大量消息被移入错误队列。现在我已经修复了错误,是否有一种简单的方法可以将它们移回原始队列以便处理它们?

2 个答案:

答案 0 :(得分:11)

您可以使用NServiceBus附带的简单命令行工具ReturnToSourceQueue.exe

它位于tools文件夹IIRC。

答案 1 :(得分:4)

  private const string QUEUE_NAME = "private$\\localqueue";
  private const string ERROR_QUEUE_NAME = "private$\\localerrorqueue";

            if (!MessageQueue.Exists(".\\" + QUEUE_NAME))
                return;

            if (!MessageQueue.Exists(".\\" + ERROR_QUEUE_NAME))
                return;

            var messageQueues = MessageQueue.GetPrivateQueuesByMachine(Environment.MachineName);

            var queue = messageQueues.Single(x => x.QueueName == QUEUE_NAME);
            var errorQueue = messageQueues.Single(x => x.QueueName == ERROR_QUEUE_NAME);

            var noOfErrorMessages = errorQueue.GetAllMessages().Count();

            if (noOfErrorMessages == 0)
                return;

            using (var transaction = new MessageQueueTransaction())
            {
                transaction.Begin();

                for (var i = 0; i < noOfErrorMessages; i++)
                {
                    var message = errorQueue.Receive(transaction);
                    queue.Send(message, transaction);
                }

                transaction.Commit();
            }