Эта страница переведена с английского языковой моделью. При любом расхождении верен английский оригинал.
Устройство
Где стоит ruststream-gcp-pubsub: между рантаймом RustStream и клиентами google-cloud-pubsub,
один streaming pull на подписку, один издатель на тему.
Схема текстом
- Ваш сервис: #[subscriber] обработчики; RustStream::new(..) .with_broker(..)
- Ядро RustStream: Рантайм: диспетчеризация, воркеры, завершение
- ruststream-gcp-pubsub: PubSubSubscriber задача перекачки на подписку; PubSubPublisher издатель клиента на тему; PubSubMessage держит аренду; PubSubBroker конфигурация; GooglePubSub подписка; Внутрипроцессный транспорт (testing)
- google-cloud-pubsub: Subscriber streaming pull; Publisher, TopicAdmin, ...
- #[subscriber] обработчики → Рантайм: диспетчеризация, воркеры, завершение: монтируются
- Рантайм: диспетчеризация, воркеры, завершение → PubSubSubscriber задача перекачки на подписку: опрашивает поток
- PubSubSubscriber задача перекачки на подписку → Subscriber streaming pull
- PubSubPublisher издатель клиента на тему → Publisher, TopicAdmin, ...
- Subscriber streaming pull → Pub/Sub или эмулятор
- Publisher, TopicAdmin, ... → Pub/Sub или эмулятор
Крейт реализует трейты брокера из ядра поверх клиента Google
google-cloud-pubsub. Рантайм
над ним один для всех брокеров. Всё, что относится к Pub/Sub, лежит в этом крейте:
дескриптор подписки, то, что каждый исход обработчика
делает с арендой, и то, как публикация передаёт свой ключ упорядочивания.
Подключение создаёт четыре клиента и делит их на всё время жизни соединения: Subscriber,
BasePublisher, TopicAdmin и SubscriptionAdmin. Административные клиенты создают топологию,
которую объявляет дескриптор, и записывают политику dead-letter, которую объявляет регистрация.
emulator направляет все клиенты на
локальный эмулятор с анонимными учётными данными. Иначе клиенты используют
endpoint и
credentials, если они заданы, а если нет,
учётные данные Application Default Credentials.
Каждая подписка запускает задачу перекачки. Она читает поток клиента и передаёт каждую доставку в
канал на 16 мест, который опрашивает рантайм. Пакеты собираются на этом канале. Аренда клиента
едет внутри каждого PubSubMessage, поэтому
завершение доставки уходит прямо в клиент.
Издатели одного соединения делят один издатель клиента на тему, и создаёт его первая публикация в эту тему. Клиент собирает то, что они отправляют, в пакеты.
Под фичей testing TestApp подключает тот же брокер не к
клиентам, а к внутрипроцессному транспорту. Транспорт моделирует темы и подписки, конкурирующих
подписчиков, подтверждение и повторную доставку, счёт попыток и перенос в тему dead-letter. Сборка
без этой фичи не содержит ничего из этого.
Как части запускаются и останавливаются, показывает страница Жизненный цикл, а путь одного сообщения - страница Путь.