Перейти к основному содержимому
Нормативная версия документации - английская

Эта страница переведена с английского языковой моделью. При любом расхождении верен английский оригинал.

Повторная доставка

Pub/Sub доставляет сообщение снова после nack или истёкшего срока, пока политика dead-letter не перенесёт его в тему dead-letter.

Одна доставка в Pub/Sub: ack удаляет сообщение, а nack или истёкший срок возвращают его, пока не достигнут предел dead-letterДоставка одного сообщенияdelivery_attempt: nack:удаленоиз подпискиnack илиистёк срокПолитика dead-letter:n меньшеmaxDeliveryAttempts?На пределе:публикуетсяв темуdead-letterНиже предела или безполитики: ожиданиеповторной попытки,затем возвратСчётчик попыток приблизителени может сброситься до нуля
Схема текстом
  1. Доставка одного сообщения delivery_attempt: n → ack: удалено из подписки
  2. Доставка одного сообщения delivery_attempt: n → nack или истёк срок
  3. nack или истёк срок → Политика dead-letter: n меньше maxDeliveryAttempts?
  4. Политика dead-letter: n меньше maxDeliveryAttempts? → Ниже предела или без политики: ожидание повторной попытки, затем возврат: ниже
  5. Политика dead-letter: n меньше maxDeliveryAttempts? → На пределе: публикуется в тему dead-letter: на пределе
  6. Ниже предела или без политики: ожидание повторной попытки, затем возврат → Доставка одного сообщения delivery_attempt: n
  7. Счётчик попыток приблизителен и может сброситься до нуля

По умолчанию подписка выполняет повторную доставку сразу. Её политика повторных попыток может вместо этого добавить экспоненциальную задержку от 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).