Эта страница переведена с английского языковой моделью. При любом расхождении верен английский оригинал.
Порядок
Сообщения с общим ключом упорядочивания, опубликованные в одном регионе, приходят в подписку с упорядочиванием сообщений в том порядке, в каком их опубликовали.
Схема текстом
- Подписка с упорядочиванием сообщений: order-1: #1, затем #2, затем #3; order-2: #1, затем #2
- Издатель в полёте один пакет на ключ → Ключ order-1: #1, #2, #3
- Издатель в полёте один пакет на ключ → Ключ order-2: #1, #2
- Ключ order-1: #1, #2, #3 → Тема публикация в одном регионе
- Ключ order-2: #1, #2 → Тема публикация в одном регионе
- Тема публикация в одном регионе → Подписка с упорядочиванием сообщений: в порядке ключа
- Повторная доставка order-1 #2 возвращает и #3, даже если #3 уже подтверждено
Порядок соблюдается внутри ключа и больше нигде. Сообщения разных ключей и сообщения без ключа приходят в любом порядке. Упорядочивание - свойство подписки: его задают при создании подписки, и потом оно не меняется. Подписка без него доставляет сообщения с ключами в любом порядке.
Издатель клиента держит в полёте один пакет на ключ, поэтому сообщения ключа доходят до Pub/Sub в том порядке, в каком их опубликовало приложение. Сообщения без ключа отправляются параллельно. Неудачная публикация приостанавливает свой ключ: клиент отклоняет следующие сообщения этого ключа, пока приложение его не возобновит.
Pub/Sub упорядочивает то, что получает в одном регионе. Издатели одного ключа в нескольких регионах
не получают порядка между собой, а региональная конечная точка
(endpoint) держит их в одном регионе.
Подписчики могут подключаться откуда угодно.
Сообщения одного ключа обычно уходят одному и тому же подписчику подписки, но Pub/Sub может перенести ключ к другому подписчику. Ключ занимает не больше 1 КБ, и один ключ публикует не больше 1 МБ/с. Если у подписки есть политика dead-letter, порядок может нарушиться, потому что перенос в тему dead-letter выполняется без гарантий.
В этом крейте
Публикация берёт ключ сначала из шага
ordering_key самого вызова, затем из
заголовка partition-key, затем из ключа, который политика
PubSubPublish задала в точке
монтирования. Ключ передаётся как ключ упорядочивания сообщения и никогда как атрибут. Если
публикация с ключом не удалась, крейт возобновляет ключ и возвращает ошибку, поэтому следующая
публикация под этим ключом отправляется.
Доставка сообщает свой ключ в заголовке partition-key. Партиции воркеров по ключу
(workers(n, by_key))
хешируют его, поэтому один ключ сохраняет порядок и внутри сервиса. Подписка, которую крейт
создаёт через create_with_topic,
создаётся с упорядочиванием сообщений. Найденная подписка сохраняет собственную настройку.
Правила взяты у Google (упорядочивание сообщений),
а правила издателя - из клиента google-cloud-pubsub 1.3
(Publisher).