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

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

Жизненный цикл

PubSubBroker::new записывает конфигурацию, connect создаёт клиенты, старт открывает каждую подписку, а завершение работы сбрасывает издателей.

Три состояния брокера как типы и то, что каждый переход делает в Pub/SubБрокерВ Pub/SubPubSubBroker::new(project)ConnectedPubSubBrokerClosed: ()Только конфигурация,без ввода-выводаСоздаются четыреклиента соединенияКаждая подписка:топология создаётся,где объявлена, затемоткрывается её потокПервая публикацияв тему запускаетеё издательЗакрытие, затемсброс издателякаждой темыИздатель до connect или после shutdownотвечает NotConnected, а не молчаливым успехом
Схема текстом
  1. Брокер: PubSubBroker::new (project); ConnectedPubSubBroker; Closed: ()
  2. В Pub/Sub: Только конфигурация, без ввода-вывода; Создаются четыре клиента соединения; Каждая подписка: топология создаётся, где объявлена, затем открывается её поток; Первая публикация в тему запускает её издатель; Закрытие, затем сброс издателя каждой темы
  3. PubSubBroker::new (project) → ConnectedPubSubBroker: connect(self)
  4. ConnectedPubSubBroker → Closed: (): shutdown(self)
  5. Только конфигурация, без ввода-вывода → Создаются четыре клиента соединения
  6. Создаются четыре клиента соединения → Каждая подписка: топология создаётся, где объявлена, затем открывается её поток
  7. Каждая подписка: топология создаётся, где объявлена, затем открывается её поток → Первая публикация в тему запускает её издатель
  8. Первая публикация в тему запускает её издатель → Закрытие, затем сброс издателя каждой темы
  9. Издатель до connect или после shutdown отвечает NotConnected, а не молчаливым успехом

new не выполняет ввода-вывода, поэтому билдер сервиса остаётся синхронным. Издатель, взятый у брокера до подключения, разделяет соединение, которое рантайм заполнит позже.

Каждая подписка открывается один раз, при старте. Сначала проверяется её дескриптор: пустое имя, предел dead-letter вне диапазона от 5 до 100 или объявление наполовину прерывают старт до первого обращения к Pub/Sub. Затем дескриптор с create_with_topic создаёт тему, тему dead-letter и подписку, если их нет, причём подписку с упорядочиванием сообщений. В Pub/Sub для этого нужны права на создание тем и подписок. Если подписка уже существует, а политика dead-letter объявлена, эта политика записывается в подписку. После этого открывается streaming pull.

Регистрация, смонтированная по простому имени, объявляет параметры переобработки так же. Две регистрации одной подписки с разными объявлениями прерывают старт, потому что у подписки одна политика dead-letter.

Завершение работы помечает соединение закрытым, а затем сбрасывает издатель каждой темы, чтобы сообщения, собранные в пакеты, дошли до Pub/Sub. Закрытое состояние ничего не несёт. Подписка останавливается, когда рантайм её удаляет: клиент перестаёт читать и продолжает продлевать аренду сообщений, которые ещё удерживаются, пока они не завершатся.