GetMessagesAsync очереди Azure не получает результатов

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

queue.ApproximateMessageCount;

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

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

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

Возможно ли, что все сообщения в вашей очереди удалены из очереди?

Gaurav Mantri 24.04.2018 13:17

если сообщения удаляются из очереди, чем все удалось? Счетчик не должен показывать 1509, верно?

apero 24.04.2018 13:19

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

Gaurav Mantri 24.04.2018 13:28

для получения сообщений в пакетном режиме необходимо настроить очередь (для EnableBatchedOperations установлено значение true)

volia17 25.04.2018 11:48
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
4
491
2

Ответы 2

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

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

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

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

queue.ApproximateMessageCount;

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

var cloudQueueMessages = await cloudQueue.GetMessagesAsync(numberOfMessages);

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

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

Другие вопросы по теме