Как получить количество мертвых писем в очереди?

Вопрос

Как получить длину очереди недоставленных писем без получения каждого сообщения и подсчета количества полученных сообщений?

Моя текущая реализация

 public int GetDeadLetterQueueCount()
    {
        //Ref:http://stackru.com/questions/22681954/how-do-you-access-the-dead-letter-sub-queue-on-an-azure-subscription

        MessagingFactory factory = MessagingFactory.CreateFromConnectionString(CloudConnectionString);

        QueueClient deadLetterClient = factory.CreateQueueClient(QueueClient.FormatDeadLetterPath(_QueueClient.Path), ReceiveMode.PeekLock);
        BrokeredMessage receivedDeadLetterMessage;

        List<string> lstDeadLetterQueue = new List<string>();

        // Ref: https://code.msdn.microsoft.com/Brokered-Messaging-Dead-22536dd8/sourcecode?fileId=123792&pathId=497121593
        // Log the dead-lettered messages that could not be processed:

        while ((receivedDeadLetterMessage = deadLetterClient.Receive(TimeSpan.FromSeconds(10))) != null)
        {
                lstDeadLetterQueue.Add(String.Format("DeadLettering Reason is \"{0}\" and Deadlettering error description is \"{1}\"",
                receivedDeadLetterMessage.Properties["DeadLetterReason"],
                receivedDeadLetterMessage.Properties["DeadLetterErrorDescription"]));
                var locktime = receivedDeadLetterMessage.LockedUntilUtc;
        }

        return lstDeadLetterQueue.Count;
    }

Проблема с реализацией

Поскольку я получаю каждое сообщение в режиме просмотра и блокировки, для сообщений установлена ​​длительность блокировки. В течение этого времени я не могу получать или даже видеть сообщения снова, пока не истечет этот период времени.

Должен быть более простой способ просто получить счет без опроса очереди?

Я не хочу потреблять сообщения, я просто хотел бы подсчитать общую сумму.

1 ответ

Решение

Вы можете использовать метод Ge tQueue () NamespaceManager, который имеет свойство MessageCountDetails, которое, в свою очередь, имеет свойство DeadLetterMessageCount. Что-то вроде:

var namespaceManager = Microsoft.ServiceBus.NamespaceManager.CreateFromConnectionString("<CONN_STRING>");
var messageDetails = namespaceManager.GetQueue("<QUEUE_NAME>").MessageCountDetails;
var deadLetterCount = messageDetails.DeadLetterMessageCount;
Другие вопросы по тегам