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

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

// Get the next messages
            var messages = await Queue.GetMessagesAsync(_messageBatchSize, lockTimeout, null, null);

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

Может ли кто-нибудь сказать мне, есть ли в очереди службы хранилища Azure метод ожидания блокировки?


person Slicc    schedule 08.07.2019    source источник


Ответы (1)


Внизу вызов API очереди службы хранилища Azure для получения сообщений — это просто REST GET. Блокирующий вызов API не выполняется, хотя вы можете указать время ожидания для самого вызова. С подробностями REST API можно ознакомиться здесь, где вы можете увидеть только две настройки, основанные на времени:

  • Тайм-аут видимости (как долго вы будете работать с сообщением в очереди, прежде чем оно снова появится в очереди для других потребителей)
  • Время ожидания вызова (до 30 секунд)

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

person David Makogon    schedule 08.07.2019
comment
Спасибо, я так и думал, мы подождем какое-то время, если сообщения не будут возвращены. - person Slicc; 08.07.2019
comment
Если вы переключитесь на очереди служебной шины, появится Message Pump, который изящно имитирует отправку облачных данных в ваше приложение (он все еще проводит опрос под капотом, но лучше, как в случае с односолодовым виски по сравнению с дешевым клубным выстрелом) — github.com/Azure/azure -service-bus/blob/master/samples/DotNet/ - person evilSnobu; 11.07.2019
comment
@evilSnobu - правда. А также множество других функций (публикация / подписка, заказ, доставка не более одного раза, большие сообщения, rbac ...), но также теряется несколько вещей (возможность изменить аренду невидимости, простота настройки и интерфейс, больший хранилище сообщений...). Я думаю, что выбор между ними немного более сложный и нюансированный (например, сравнение односолодовых виски), поэтому я сосредоточился здесь только на очередях Azure. - person David Makogon; 11.07.2019