Временно приостановить: очередь сообщений служебной шины Azure

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


person Renu Saini    schedule 23.10.2018    source источник
comment
Описание сбивает с толку. Вся суть очереди заключается в разделении и загрузке уровня. Если у третьей стороны возникнут проблемы, сообщения останутся в очереди, вам не нужно ничего делать. Вы должны добавить более подробную информацию о том, в чем проблема, если это не так.   -  person Sean Feldman    schedule 24.10.2018
comment
Проблема заключается в том, что функция azure принимает сообщение и начинает его обрабатывать, но сторонний api не работает, поэтому сообщение потребляется, но не получает желаемого результата, мы должны отправить то же сообщение снова, когда сторонний api снова будет запущен.   -  person Renu Saini    schedule 24.10.2018
comment
Вы контролируете функцию, которая принимает сообщения и вызывает стороннюю организацию?   -  person Sean Feldman    schedule 25.10.2018
comment
@SeanFeldman: у нас есть контроль над функцией, которая обрабатывает сообщения в очереди.   -  person Renu Saini    schedule 29.10.2018
comment
В этом случае кажется, что отключение функции Azure было бы подходящим подходом. Добавлю ответ.   -  person Sean Feldman    schedule 29.10.2018


Ответы (4)


Судя по комментариям, именно функция Azure вызывает сторонний API, который может дать сбой. В этом случае отключение функции Azure может быть более простой подход - никаких попыток обработки, никаких повторных попыток отправки сообщений, никаких изменений в пространстве имен / объектах служебной шины Azure. Если вы уверены, что можете повторно включить функцию Azure, сообщения будут обрабатываться снова.

person Sean Feldman    schedule 29.10.2018
comment
для этого кто-то должен отслеживать сторонний API и вручную останавливать функцию azure, которую мы хотим обрабатывать программно в этом сценарии, разве функция Azure не может временно отключить очередь до тех пор, пока третья сторона не вернется к жизни и не включится снова ? - person Renu Saini; 31.10.2018
comment
Для отключения очереди или функции потребуется дополнительный компонент с логикой. В любом случае, это не сидеть и смотреть, а потом действовать, а автоматический мониторинг / зондирование. Со сторонней организацией это может быть пинг. Или вы можете настроить мониторинг увеличения / уменьшения размера очереди в течение определенного периода времени, чтобы вызвать другую функцию, которая будет включать / отключать вашу функцию или очередь. - person Sean Feldman; 31.10.2018

Вы можете изменить состояние очереди на ReceiveDisabled. Это поможет остановить триггер функции Azure.

Состояния приостановки служебной шины

person renjuwm    schedule 14.01.2020

Очереди, темы и подписки могут быть временно приостановлены. Приостановление переводит объект в отключенное состояние, в котором все сообщения сохраняются в хранилище. Однако сообщения не могут быть удалены или добавлены, и соответствующие операции протокола приводят к ошибкам.

Приостановка или повторная активация может выполняться либо пользователем, либо системой. Система приостанавливает работу объектов только из-за серьезных административных причин, таких как превышение лимита расходов на подписку. Сущности, отключенные системой, не могут быть повторно активированы пользователем, но восстанавливаются после устранения причины приостановки.

В портале раздел Properties для соответствующей сущности позволяет изменять состояние; на следующем снимке экрана показан переключатель очереди:  введите здесь описание изображения Примечание: портал позволяет только полностью отключить очереди (очередь приостановлена).

Дополнительные сведения можно найти в этой статье .

person Joey Cai    schedule 24.10.2018
comment
мы хотим отключить очередь прагматически, как только наш сторонний API не работает, мы отключаем очередь и включаем ее, как только она снова включается. - person Renu Saini; 29.10.2018

Используйте режим PeekLock для очереди служебной шины.

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

Дополнительные сведения: https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-queues-topics-subscriptions

person SwissCoder    schedule 13.12.2020