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

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

Как этого добиться? Я не хочу вручную проверять очередь с высоким приоритетом перед обработкой каждого сообщения, так как это будет стоить операции ввода-вывода (платно). Насколько мне известно, веб-задания не могут напрямую взаимодействовать друг с другом, поэтому я не думаю, что использование другого веб-задания с триггером очереди сработает (сообщите мне, если это неверно).


person Ritchie    schedule 20.03.2018    source источник
comment
Почему бы не запустить два веб-задания, запускаемых из очереди? Казалось бы, это решает проблему без каких-либо недостатков, если вы не пытаетесь не доставлять сообщения из очереди с обычным приоритетом при доставке сообщений с высоким приоритетом?   -  person Simon W    schedule 21.03.2018
comment
@SimonW Да, верно - плюс немного посложнее. Я не хотел писать полный фон сценария, так как думал, что это отвлечет от этого вопроса, но, по сути, веб-задание снимает сообщения из очереди и обрабатывает их с заданной скоростью (дросселируется по времени, например 1 в секунду, установленное внешними API). Это узкое место. Единственный способ, которым я мог достичь этого, - это просто непрерывная веб-работа с таймером. Возможно, это неправильная архитектура - я мог бы задать еще один вопрос по этому поводу.   -  person Ritchie    schedule 21.03.2018
comment
Я думаю, что использование веб-вакансий таким образом, вероятно, не подходит. Возможно, вы захотите контролировать скорость, с которой сообщения поступают во входящий конвейер (очередь), и контролировать ее таким образом, вместо того, чтобы пытаться ограничивать выход. Опасность заключается в том, что вы загружаете слишком много сообщений в свою очередь и слишком долго обрабатываете сообщение, тогда, возможно, оно либо устарело при обработке , либо истекает в очереди.   -  person Simon W    schedule 23.03.2018


Ответы (1)


Ричи, вам следует подумать об использовании служебной шины Azure, а затем использовать очереди приоритета. В этом сообщении в блоге есть отличный пост с подробным описанием того, как это сделать. Отметьте использованные методы буксировки:

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

Второй прием:

Альтернативный подход - использовать темы и подписки Azure Service Bus. При таком подходе все сообщения отправляются в одну и ту же тему. Но вместе с сообщением включен фрагмент метаданных, который можно использовать для разделения сообщений на высокие и низкие приоритеты.

person Adam Smith - Microsoft Azure    schedule 29.03.2018