2010-12-14 39 views

回答

11

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

它位于tools文件夹IIRC。

+0

如果你反映这些组件,这是很容易弄清楚如何使围绕这一过程中额外的工具,所以你不必总是登录到服务器并运行一个命令行工具。 – 2010-12-15 16:21:09

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(); 
      }