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

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

Устройство

Где стоит ruststream-gcp-pubsub: между рантаймом RustStream и клиентами google-cloud-pubsub, один streaming pull на подписку, один издатель на тему.

Сверху вниз: сервис, рантайм RustStream, этот крейт, клиенты google-cloud-pubsub и Pub/SubВаш сервисЯдро RustStreamruststream-gcp-pubsubgoogle-cloud-pubsub#[subscriber]обработчикиRustStream::new(..).with_broker(..)Рантайм: диспетчеризация, воркеры, завершениеPubSubSubscriberзадача перекачкина подпискуPubSubPublisherиздатель клиентана темуPubSubMessageдержит арендуPubSubBrokerконфигурацияGooglePubSubподпискаВнутрипроцессныйтранспорт (testing)Subscriberstreaming pullPublisher,TopicAdmin, ...Pub/Sub или эмулятор
Схема текстом
  1. Ваш сервис: #[subscriber] обработчики; RustStream::new(..) .with_broker(..)
  2. Ядро RustStream: Рантайм: диспетчеризация, воркеры, завершение
  3. ruststream-gcp-pubsub: PubSubSubscriber задача перекачки на подписку; PubSubPublisher издатель клиента на тему; PubSubMessage держит аренду; PubSubBroker конфигурация; GooglePubSub подписка; Внутрипроцессный транспорт (testing)
  4. google-cloud-pubsub: Subscriber streaming pull; Publisher, TopicAdmin, ...
  5. #[subscriber] обработчики → Рантайм: диспетчеризация, воркеры, завершение: монтируются
  6. Рантайм: диспетчеризация, воркеры, завершение → PubSubSubscriber задача перекачки на подписку: опрашивает поток
  7. PubSubSubscriber задача перекачки на подписку → Subscriber streaming pull
  8. PubSubPublisher издатель клиента на тему → Publisher, TopicAdmin, ...
  9. Subscriber streaming pull → Pub/Sub или эмулятор
  10. 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. Сборка без этой фичи не содержит ничего из этого.

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