NServiceBus: Как переместить сообщения из очереди ошибок - PullRequest
7 голосов
/ 14 декабря 2010

В моем приложении была ошибка, из-за которой в очередь ошибок помещалось несколько сообщений. Теперь, когда я исправил ошибку, существует ли простой способ переместить их обратно в исходную очередь, чтобы их можно было обработать?

Ответы [ 2 ]

11 голосов
/ 14 декабря 2010

Вы можете использовать простой инструмент командной строки, ReturnToSourceQueue.exe, который входит в состав NServiceBus.

Он находится в папке tools IIRC.

4 голосов
/ 19 декабря 2010
  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();
            }
...