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

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

Порядок

Сообщения с общим ключом упорядочивания, опубликованные в одном регионе, приходят в подписку с упорядочиванием сообщений в том порядке, в каком их опубликовали.

Два ключа упорядочивания от одного издателя: каждый ключ публикуется по одному пакету за раз и доставляется в своём порядкеПодписка с упорядочиванием сообщенийИздательв полёте один пакет на ключКлюч order-1:#1, #2, #3Ключ order-2:#1, #2Темапубликация в одном регионеorder-1:#1, затем #2,затем #3order-2:#1, затем #2Повторная доставка order-1 #2 возвращает и #3,даже если #3 уже подтверждено
Схема текстом
  1. Подписка с упорядочиванием сообщений: order-1: #1, затем #2, затем #3; order-2: #1, затем #2
  2. Издатель в полёте один пакет на ключ → Ключ order-1: #1, #2, #3
  3. Издатель в полёте один пакет на ключ → Ключ order-2: #1, #2
  4. Ключ order-1: #1, #2, #3 → Тема публикация в одном регионе
  5. Ключ order-2: #1, #2 → Тема публикация в одном регионе
  6. Тема публикация в одном регионе → Подписка с упорядочиванием сообщений: в порядке ключа
  7. Повторная доставка 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).