Эта страница переведена с английского языковой моделью. При любом расхождении верен английский оригинал.
Жизненный цикл
PulsarBroker::new записывает конфигурацию, connect собирает
клиент, старт открывает консьюмер на каждую подписку, а
завершение работы закрывает продюсеры.
Схема текстом
- Брокер: PulsarBroker::new (url); ConnectedPulsarBroker; Closed: ()
- В Pulsar: Только конфигурация, без ввода-вывода; Сборка клиента: URL, токен, попытки; Каждая подписка: консьюмер и его управляющая задача; Первая публикация в топик открывает его продюсер; Пометка о закрытии, продюсеры закрыты
- PulsarBroker::new (url) → ConnectedPulsarBroker: connect(self)
- ConnectedPulsarBroker → Closed: (): shutdown(self)
- Только конфигурация, без ввода-вывода → Сборка клиента: URL, токен, попытки
- Сборка клиента: URL, токен, попытки → Каждая подписка: консьюмер и его управляющая задача
- Каждая подписка: консьюмер и его управляющая задача → Первая публикация в топик открывает его продюсер
- Первая публикация в топик открывает его продюсер → Пометка о закрытии, продюсеры закрыты
- Издатель или перемотка, пережившие соединение, отвечают PulsarError::NotConnected, а не молчаливым успехом
new не выполняет ввода-вывода, поэтому билдер сервиса остаётся синхронным. Рантайм подключает
брокер при старте приложения. Подключение собирает клиент из URL, токена и
повторных попыток операций. Если клиент собрать не удалось, старт прерывается
с ошибкой PulsarError::Connect. Издатель, взятый
у брокера до подключения, после подключения пользуется его соединением.
Сначала проверяется дескриптор каждой подписки: имя подписки, допустимые имена топиков или
допустимый шаблон и объявление повторов, которое Pulsar может выполнить. Затем открывается
консьюмер клиента, на том рантайме, где подключился брокер, и рядом с ним запускается управляющая
задача. Если сервер отказывает, старт прерывается с ошибкой
PulsarError::Subscribe, в которой назван
топик.
Сервис, который только читает, продюсеров не открывает. Продюсер топика открывает первая публикация в него.
Завершение работы помечает соединение закрытым, а затем закрывает все продюсеры. Собственного закрытия у клиента нет, поэтому закрытое состояние ничего не содержит. Удаление подписки останавливает её управляющую задачу. Задача продолжает завершать доставки, пока каждая выданная ею доставка не завершится или не будет удалена, и только потом закрывает консьюмер.