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

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

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

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

Состояния брокера как типы и то, что каждый переход делает в PulsarБрокерВ PulsarPulsarBroker::new(url)ConnectedPulsarBrokerClosed: ()Только конфигурация,без ввода-выводаСборка клиента:URL, токен, попыткиКаждая подписка:консьюмер и егоуправляющая задачаПервая публикацияв топик открываетего продюсерПометка о закрытии,продюсеры закрытыИздатель или перемотка, пережившие соединение,отвечают PulsarError::NotConnected, а не молчаливым успехом
Схема текстом
  1. Брокер: PulsarBroker::new (url); ConnectedPulsarBroker; Closed: ()
  2. В Pulsar: Только конфигурация, без ввода-вывода; Сборка клиента: URL, токен, попытки; Каждая подписка: консьюмер и его управляющая задача; Первая публикация в топик открывает его продюсер; Пометка о закрытии, продюсеры закрыты
  3. PulsarBroker::new (url) → ConnectedPulsarBroker: connect(self)
  4. ConnectedPulsarBroker → Closed: (): shutdown(self)
  5. Только конфигурация, без ввода-вывода → Сборка клиента: URL, токен, попытки
  6. Сборка клиента: URL, токен, попытки → Каждая подписка: консьюмер и его управляющая задача
  7. Каждая подписка: консьюмер и его управляющая задача → Первая публикация в топик открывает его продюсер
  8. Первая публикация в топик открывает его продюсер → Пометка о закрытии, продюсеры закрыты
  9. Издатель или перемотка, пережившие соединение, отвечают PulsarError::NotConnected, а не молчаливым успехом

new не выполняет ввода-вывода, поэтому билдер сервиса остаётся синхронным. Рантайм подключает брокер при старте приложения. Подключение собирает клиент из URL, токена и повторных попыток операций. Если клиент собрать не удалось, старт прерывается с ошибкой PulsarError::Connect. Издатель, взятый у брокера до подключения, после подключения пользуется его соединением.

Сначала проверяется дескриптор каждой подписки: имя подписки, допустимые имена топиков или допустимый шаблон и объявление повторов, которое Pulsar может выполнить. Затем открывается консьюмер клиента, на том рантайме, где подключился брокер, и рядом с ним запускается управляющая задача. Если сервер отказывает, старт прерывается с ошибкой PulsarError::Subscribe, в которой назван топик.

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

Завершение работы помечает соединение закрытым, а затем закрывает все продюсеры. Собственного закрытия у клиента нет, поэтому закрытое состояние ничего не содержит. Удаление подписки останавливает её управляющую задачу. Задача продолжает завершать доставки, пока каждая выданная ею доставка не завершится или не будет удалена, и только потом закрывает консьюмер.