Как Azure Event Grid обрабатывает сбои при наличии нескольких подписчиков?

В документации для Event Grid указано, что он имеет доставку и встроенный механизм повторных попыток и дает пример того, что можно классифицировать как успешную или неудачную попытку. Документация очень четко описывает, что происходит с одним обработчиком событий.

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


person Andrew Williamson    schedule 22.01.2019    source источник
comment
Я могу только предположить, что если событие не может быть доставлено ни одному из подписчиков, оно будет недоставлено. Сказав это, лучше поднять этот вопрос с документацией. Что я и сделал здесь.   -  person Sean Feldman    schedule 23.01.2019
comment
Спасибо, Шон. На самом деле мой вопрос был о повторной доставке и о том, доставляется ли сообщение повторно всем подписчикам или только тому, который не удалось отправить, но вопрос о недоставленных письмах также является хорошим вопросом. Я добавлю это к проблеме GitHub. А пока я не уверен, закрывать ли этот вопрос или оставить его открытым   -  person Andrew Williamson    schedule 23.01.2019
comment
Оставить открытым. Ответит либо команда EG, либо вы сами. В любом случае люди найдут это с ответом.   -  person Sean Feldman    schedule 23.01.2019
comment
Модель обработки событий AEG, использующая шаблон разветвления для доставки сообщения о событии подписанным обработчикам. Эта логическая связность для каждого веерного выхода описывается подпиской, и они полностью прозрачны друг для друга и слабо развязаны. Поведение доставки каждого события в этом шаблоне разветвления основано на их подписках, таких как повторные попытки, недоставление сообщений, фильтрация и т. д. Обратите внимание, что в зависимости от типа конечной точки подписчика мы можем легко изменить режим доставки по умолчанию, такой как PushWithAck. в режим Pull (асинхронный), например: очередь хранилища и HybridConnection   -  person Roman Kiss    schedule 23.01.2019
comment
для целей тестирования (например, вашего вопроса) вы можете использовать инструмент тестирования codeproject.com/Articles/1254463/Azure-Event-Grid-Tester, где можно смоделировать ваш случай, например: настраиваемая тема + подписчик очереди хранилища + подписчик HybridConnection с ошибкой (503) имитация доставки.   -  person Roman Kiss    schedule 23.01.2019


Ответы (3)


По сути, модель Pub/Sub обработки событий Azure Event Grid может обрабатывать два шаблона обмена сообщениями/посредничества, например шаблон Fan-In и шаблон Fan-Out (широковещательная рассылка). Следующие фрагменты экрана показывают их различия:

введите описание изображения здесь

введите описание изображения здесь

Логическая связь между источником событий и приемником событий описывается подпиской, которая в основном является артефактом метаданных модели Pub/Sub. Каждая логическая связь (представленная подпиской) независима и слабо связана с другими. Другими словами, каждый подписчик может обрабатывать в этой модели Pub/Sub только одно логическое соединение, например, только один источник событий.

Ваш вопрос связан с шаблоном разветвления (трансляции), когда интерес к событию передается нескольким подписчикам с использованием режима доставки PushWithAck. Каждая подписка в рамках этого шаблона разветвления имеет собственную «машину доставки состояния сообщения», объявленную подписчиком, например, возможность повторной попытки, удаление недоставленных сообщений, фильтрацию и т. д.

Другими словами, доставка событий подписчикам обрабатывается параллельно на основе их подписки прозрачным образом без какой-либо зависимости друг от друга. Обратите внимание, что подписчик не имеет никакой информации о том, кто, где, как и т. д. доставляет событие другому один раз, поэтому каждый подписчик может видеть только свое состояние доставки, например, значение параметра Aeg-Delivery. -Count показывает счетчик повторных попыток конечного автомата.

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

person Roman Kiss    schedule 23.01.2019
comment
Спасибо Роман. Я не знал, что мёртвая надпись — это вариант для каждого подписчика, я думал, что это для каждой темы, так что это объясняет, как всё это может работать так, как ожидалось. - person Andrew Williamson; 23.01.2019

Как объяснил Роман, каждая конечная точка обрабатывается независимо. Если один обработчик событий дает сбой, он будет предпринят повторно, не затрагивая другие обработчики событий, и, конечно, если эта конкретная конечная точка продолжит сбой, она в конечном итоге будет помечена как недоставленная (при условии, что в подписке на событие настроена недооценка) или удалена.

person Bahram Banisadr    schedule 23.01.2019

При публикации событий в сетках событий события из настраиваемых тем сетки событий или тем системных сеток событий (например, пространств имен служебной шины) перенаправляются в настроенные с ними подписки сетки событий. Затем события отправляются на конечные точки, для которых настроена подписка на сетку событий.

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

По умолчанию в сетке событий истекает срок действия всех событий, которые не были доставлены в течение 24 часов. Вы можете настроить политику повторных попыток при создании подписки на события. Вы указываете максимальное количество попыток доставки (по умолчанию — 30) и время жизни события (по умолчанию — 1440 минут).

При наличии нескольких подписчиков (подписок на сетку событий) на одну и ту же тему сетки событий повторная попытка выполняется только для той подписки на сетку событий, доставка события которой не удалась.

см. доставку сообщений сетки событий и повторную попытку для Дополнительные сведения о политике повторных попыток.

person Ranjith Eswaran    schedule 24.01.2019