2010-12-14 14 views

risposta

11

È possibile utilizzare un semplice strumento da riga di comando, ReturnToSourceQueue.exe, incluso in NServiceBus.

Si trova nella cartella tools IIRC.

+0

E se si riflette queste assemblee, è abbastanza facile da capire come fare ulteriore utensili che circonda questo processo in modo che non sempre è necessario accedere al server ed eseguire un tool a riga di comando. –

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