Эта страница переведена с английского языковой моделью. При любом расхождении верен английский оригинал.
Жизненный цикл
PubSubBroker::new записывает конфигурацию,
connect создаёт клиенты, старт открывает каждую подписку, а завершение работы сбрасывает издателей.
Схема текстом
- Брокер: PubSubBroker::new (project); ConnectedPubSubBroker; Closed: ()
- В Pub/Sub: Только конфигурация, без ввода-вывода; Создаются четыре клиента соединения; Каждая подписка: топология создаётся, где объявлена, затем открывается её поток; Первая публикация в тему запускает её издатель; Закрытие, затем сброс издателя каждой темы
- PubSubBroker::new (project) → ConnectedPubSubBroker: connect(self)
- ConnectedPubSubBroker → Closed: (): shutdown(self)
- Только конфигурация, без ввода-вывода → Создаются четыре клиента соединения
- Создаются четыре клиента соединения → Каждая подписка: топология создаётся, где объявлена, затем открывается её поток
- Каждая подписка: топология создаётся, где объявлена, затем открывается её поток → Первая публикация в тему запускает её издатель
- Первая публикация в тему запускает её издатель → Закрытие, затем сброс издателя каждой темы
- Издатель до 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. Закрытое состояние ничего не несёт. Подписка останавливается, когда рантайм её удаляет: клиент перестаёт читать и продолжает продлевать аренду сообщений, которые ещё удерживаются, пока они не завершатся.