Por lo que puedo ver en la documentación, la forma en que debe verificar si hay mensajes en una cola de mensajes es usar el método Peek. Luego confía en que falla con una excepción MessageQueueException para informarle que la cola estaba vacía.¿Puedo echar un vistazo al MSMQ vacío sin obtener una excepción?
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;
}
Siempre han dicho - y han experimentado - Excepciones que son costosos, y no debe utilizarse para las operaciones normales. Así que mis preguntas son:
Son mis suposiciones que depender de agarrar la MessageQueueException es una operación costosa correcta?
¿Hay alguna manera de verificar sincrónicamente si hay mensajes en una cola sin tener que depender de excepciones?
estoy trabajando con el espacio de nombres System.Messaging en C#, pero si yo tendría que ir sin gestionar para resolver este que podría ser una opción. Y tenga en cuenta que quiero una solución sin usar WCF con MSMQ.
Pasamos mensajes a través de una serie de servicios donde utilizamos colas entre ellos. Queremos tener el mayor rendimiento posible, por lo que no es poco importante, pero hasta ahora tenemos un rendimiento lo suficientemente bueno. –
Esperaré para ver si recibo algún otro comentario, pero si no lo hago, aceptaré su respuesta: | –