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

Msmq NServiceBus:如何从错误队列中移动消息,msmq,nservicebus,Msmq,Nservicebus,我的应用程序中有一个错误,导致许多消息被移动到错误队列中。现在我已经修复了这个错误,有没有简单的方法将它们移回原始队列以便处理它们?您可以使用一个简单的命令行工具,ReturnToSourceQueue.exe,它包含在NServiceBus中 它位于tools文件夹IIRC.private const string QUEUE\u NAME=“private$\\localqueue”; private const string QUEUE_NAME = "private$\\localq

我的应用程序中有一个错误,导致许多消息被移动到错误队列中。现在我已经修复了这个错误,有没有简单的方法将它们移回原始队列以便处理它们?

您可以使用一个简单的命令行工具,
ReturnToSourceQueue.exe
,它包含在NServiceBus中

它位于
tools
文件夹IIRC.

private const string QUEUE\u NAME=“private$\\localqueue”;
  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();
            }
private const字符串错误\u QUEUE\u NAME=“private$\\localerrorqueue”; 如果(!MessageQueue.Exists(“.\\”+队列名称)) 返回; 如果(!MessageQueue.Exists(“.\\”+错误\队列\名称)) 返回; var messageQueues=MessageQueue.GetPrivateQueuesByMachine(Environment.MachineName); var queue=messageQueues.Single(x=>x.QueueName==queue\u NAME); var errorQueue=messageQueues.Single(x=>x.QueueName==ERROR\u QUEUE\u NAME); var noOfErrorMessages=errorQueue.GetAllMessages().Count(); if(noorFerrormessages==0) 返回; 使用(var transaction=new MessageQueueTransaction()) { transaction.Begin(); 对于(var i=0;i
如果您反映了这些程序集,就可以很容易地找到如何围绕此过程制作其他工具,这样您就不必总是登录到服务器并运行命令行工具。