Как Azure Event Grid обрабатывает сбой при наличии нескольких подписчиков?
В документации для таблицы событий указано, что в нее встроен механизм доставки и повтора, и приведен пример того, что можно было бы классифицировать как успешную или неудачную попытку. Документация очень четко описывает, что происходит с одним обработчиком событий.
Мой вопрос: что произойдет, если есть несколько обработчиков событий, и только один обработчик не может получить событие? Событие повторяется только для этого обработчика, или все обработчики увидят повтор?
3 ответа
По сути, модель Pub/Sub событийной таблицы Azure Event Grid может обрабатывать два шаблона обмена сообщениями / передачи, таких как шаблон Fan-In и Fan-Out (широковещательный). Следующие фрагменты экрана показывают их различия:
Логическая связь между источником события и приемником события описывается подпиской, которая является в основном артефактом метаданных модели Pub/Sub. Каждая логическая связь (представленная подпиской) является независимой и слабо отделена от других. Другими словами, каждый подписчик может обрабатывать в этой модели Pub/Sub только одно логическое соединение, например, только один источник событий.
Ваш вопрос связан с шаблоном разветвления (широковещания), когда интерес события транслируется нескольким подписчикам с использованием режима доставки PushWithAck. Каждая подписка в этом шаблоне разветвления имеет собственный "механизм доставки сообщений", объявленный подписчиком, такой как параметр повторных попыток, рассылка сообщений, фильтрация и т. Д.
Другими словами, доставка событий подписчикам обрабатывается параллельно на основе их подписки прозрачным образом без каких-либо зависимостей друг от друга. Обратите внимание, что у подписчика нет никакой информации о том, кто, где, как и т. Д. Один раз доставляет событие другому, поэтому каждый подписчик может видеть только собственное состояние доставки, например, значение Aeg-Delivery-Count показывает счетчик повторов конечного автомата.
Таким образом, в случае неудачной доставки события одному из нескольких подписчиков, включенный процесс повторной попытки выполняется только для этого подписчика.
Как объяснил Роман, каждая конечная точка обрабатывается независимо. В случае сбоя одного обработчика событий он будет повторен, не затрагивая другие обработчики событий, и, конечно же, если эта конкретная конечная точка продолжает отказывать, он в конечном итоге будет заблокирован (при условии, что в подписке на событие настроено deadlettering) или удален.
При переходе к публикации событий в сетках событий события из пользовательских тем сетки событий или тем сетки системных событий (например, пространств имен служебной шины) перенаправляются в настроенные с ними подписки сетки событий. Затем события отправляются на конечные точки, настроенные с помощью подписки на сетку событий.
Всякий раз, когда происходит сбой доставки события в конечную точку, она повторяется на основе настроенной политики повторных попыток. Если число повторных попыток превышает настроенную политику повторных попыток, события сохраняются в BLOB-объекте учетной записи хранения, если он настроен как пункт назначения недоставленных писем, иначе события будут потеряны.
По умолчанию Сетка событий истекает все события, которые не доставлены в течение 24 часов. Вы можете настроить политику повтора при создании подписки на событие. Вы указываете максимальное количество попыток доставки (по умолчанию 30) и время жизни события (по умолчанию 1440 минут).
При наличии нескольких подписчиков (подписок сетки событий) на одну и ту же тему сетки событий повторная попытка происходит только с подпиской сетки событий, доставка события которой не удалась.
обратитесь к доставке сообщений в таблице событий и повторите попытку для получения дополнительной информации о политике повторных попыток.