Эта страница переведена с английского языковой моделью. При любом расхождении верен английский оригинал.
Повторная доставка
Pub/Sub доставляет сообщение снова после nack или истёкшего срока, пока политика dead-letter не перенесёт его в тему dead-letter.
Схема текстом
- Доставка одного сообщения delivery_attempt: n → ack: удалено из подписки
- Доставка одного сообщения delivery_attempt: n → nack или истёк срок
- nack или истёк срок → Политика dead-letter: n меньше maxDeliveryAttempts?
- Политика dead-letter: n меньше maxDeliveryAttempts? → Ниже предела или без политики: ожидание повторной попытки, затем возврат: ниже
- Политика dead-letter: n меньше maxDeliveryAttempts? → На пределе: публикуется в тему dead-letter: на пределе
- Ниже предела или без политики: ожидание повторной попытки, затем возврат → Доставка одного сообщения delivery_attempt: n
- Счётчик попыток приблизителен и может сброситься до нуля
По умолчанию подписка выполняет повторную доставку сразу. Её политика повторных попыток может вместо этого добавить экспоненциальную задержку от 0 до 600 секунд (по умолчанию от 10 до 600). Задержка не гарантирована: когда nack много, сообщение может ждать меньше.
Политика dead-letter - свойство подписки: тема dead-letter и maxDeliveryAttempts от 5 до 100 (по
умолчанию 5). Попытки считает только подписка с такой политикой, и только тогда доставка несёт
delivery_attempt. Перенос выполняется без гарантий, поэтому сообщение может быть доставлено на
несколько раз больше предела.
Pub/Sub переносит сообщение так: публикует его в тему dead-letter и подтверждает в подписке. Его служебному агенту нужны роль издателя на этой теме и роль подписчика на подписке. Тема dead-letter без собственной подписки теряет всё, что получает.
Доставка exactly-once
Доставка exactly-once - ещё одно свойство подписки, для pull и streaming pull. ack, который подтвердил Pub/Sub, окончателен: сообщение больше не доставляется. Клиент должен запросить это подтверждение, а гарантия действует только для подписчиков, которые подключаются в одном регионе, и это обеспечивает региональная конечная точка. Такие доставки занимают заметно больше времени, чем на обычной подписке.
В этом крейте
Доставка сообщает delivery_attempt в заголовке pubsub-delivery-attempt.
max_attempts(n) и
dead_letter(topic) регистрации становятся
политикой dead-letter подписки, которая записывается, когда подписка открывается. Предел вне
диапазона от 5 до 100 или только одно из двух объявлений без другого прерывает старт до первого
обращения к Pub/Sub. Как каждый исход обработчика попадает в эту картину, показывает страница
Завершение.
Правила взяты у Google (политика повторных попыток, темы dead-letter, доставка exactly-once).