Per quanto posso vedere dalla documentazione, il modo in cui si suppone di controllare se ci sono messaggi in una coda di messaggi è di usare il metodo Peek. In tal caso, si fa affidamento su di esso con un errore MessageQueueException per indicare che la coda era vuota.Posso dare un'occhiata a MSMQ vuoto senza ottenere eccezioni?
public bool IsQueueEmpty()
{
bool isQueueEmpty = false;
MessageQueue myQueue = new MessageQueue(".\\myQueue");
try
{
myQueue.Peek(new TimeSpan(0));
isQueueEmpty = false;
}
catch(MessageQueueException e)
{
if (e.MessageQueueErrorCode ==
MessageQueueErrorCode.IOTimeout)
{
isQueueEmpty = true;
}
}
return isQueueEmpty;
}
Sono sempre stato detto - e hanno sperimentato - che exeptions sono costosi, e non deve essere utilizzato per le normali operazioni. Quindi le mie domande sono:
sono le mie supposizioni che basandosi su di prendere il MessageQueueException è un'operazione costosa corretta?
C'è un modo per verificare in modo sincrono se ci sono messaggi in una coda senza dover fare affidamento sulle eccezioni?
sto lavorando con lo spazio dei nomi System.Messaging in C#, ma se avrei bisogno di andare non gestito per risolvere questo che potrebbe essere un'opzione. E nota che voglio una soluzione senza usare WCF con MSMQ.
Passiamo i messaggi attraverso una pipeline di servizi in cui utilizziamo le code tra di loro. Vogliamo avere il massimo rendimento possibile, quindi non è poco importante, ma finora abbiamo prestazioni abbastanza buone. –
Aspetterò di vedere se ottengo altri commenti, ma se non accetto accetterò la tua risposta: | –