Nella mia applicazione ho riscontrato un errore che causa il trasferimento di un numero di messaggi nella coda degli errori. Ora che ho corretto il bug, c'è un modo semplice per spostarli nuovamente nella coda originale in modo che possano essere elaborati?NServiceBus: Come spostare i messaggi dalla coda degli errori
7
A
risposta
11
È possibile utilizzare un semplice strumento da riga di comando, ReturnToSourceQueue.exe
, incluso in NServiceBus.
Si trova nella cartella tools
IIRC.
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();
}
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. –