Azure Queue GetMessagesAsync не получает результатов - PullRequest
0 голосов
/ 24 апреля 2018

Я пытаюсь получить 32 сообщения на запрос из очереди Azure.

queue.ApproximateMessageCount;

Этот код дает мне результат 1509. Сказал, что соединение в порядке, и у него есть записи.Также я проверяю в очереди, это действительно 1509 записей.Но когда я пытаюсь получить записи, я не получаю никаких записей.Я делаю следующее:

var messages = await queue.GetMessagesAsync(configuration.MessageBatchSize);
if (!messages.Any()) {
    return;
}

Это всегда идет в if и возвращает.Что здесь происходит и чего мне не хватает?

Ответы [ 2 ]

0 голосов
/ 25 марта 2019
Свойство

ApproximateMessageCount представляет общее количество сообщений, доступных в очереди на данный момент.Это не означает, что все сообщения ( max # 32 сообщений в потоке ) готовы к снятию с очереди.Вы можете использовать это свойство, чтобы определить, сколько сообщений находится в очереди.

queue.ApproximateMessageCount;

Если вы не можете получить сообщение по, GetMessagesAsync(numberOfMessages), то оно говорит, что все сообщения не доступны или невидимы для текущегоQueueClient.

var cloudQueueMessages = await cloudQueue.GetMessagesAsync(numberOfMessages);

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

Обратите внимание, что рекомендуется установить достаточный тайм-аут видимости для любого сообщения, отправляемого в очередь наизбежать бесконечного голодания:)

0 голосов
/ 25 апреля 2018

Делайте это, получая сообщения в пакетном режиме, я использую такой код:

var messages = await queueClient?.ReceiveBatchAsync(Max_Messages);
foreach (var message in messages)
{
    await dispatcher.Dispatch(message); // do something with each message
}

Но для получения сообщений с ReceiveBatchAsync очередь должна быть настроена с флагом EnableBatchedOperations в значение true.

...