Эта страница переведена с английского языковой моделью. При любом расхождении верен английский оригинал.
Устройство
Ядро не знает ни одного брокера: крейт брокера реализует его трейты и хранит все настройки своего брокера.
Схема текстом
- Ваш сервис: #[subscriber] обработчики; #[ruststream::app] сборщик
- ruststream: рантайм: маршрутизация, диспетчеризация, подтверждение; кодеки: JSON, CBOR, MessagePack или никакой; выбор при компиляции; фичи: брокер в памяти, AsyncAPI, метрики, OpenTelemetry, тесты; Broker, Subscriber, Publisher, источники, политики; совместимость: пакеты, транзакции, запрос и ответ, перемотка
- Крейты брокеров: ruststream-nats субъекты, потоки, политики, настройки, шаги монтирования; ruststream-rdkafka топики, группы, политики, настройки, шаги монтирования
- #[subscriber] обработчики → рантайм: маршрутизация, диспетчеризация, подтверждение: монтируются
- ruststream-nats субъекты, потоки, политики, настройки, шаги монтирования → Broker, Subscriber, Publisher, источники, политики: реализует
- ruststream-rdkafka топики, группы, политики, настройки, шаги монтирования → совместимость: пакеты, транзакции, запрос и ответ, перемотка: реализует
- ruststream-nats субъекты, потоки, политики, настройки, шаги монтирования → async-nats: обёртывает
- ruststream-rdkafka топики, группы, политики, настройки, шаги монтирования → rdkafka: обёртывает
Ядро не зависит ни от одного клиента брокера. Обязательных трейтов три: жизненный цикл
соединения, подписчик в виде Stream доставок и издатель. Пакеты, транзакции, запрос с ответом,
перемотка и значения, которые доставка уже несёт, оформлены трейтами совместимости. Брокер
реализует их, только если их умеет его клиент.
Словарь брокера живёт в его крейте. Там описаны формы подписки, политики издателей, настройки отдельного сообщения и шаги монтирования, которые читают настройки цепочки. В ядре нет ни настроек конкретного брокера, ни значений по умолчанию для них.
Кодек - это тип: кодек, названный при монтировании, или кодек по умолчанию, который выбирает включённая фича. Без фичи кодека значения по умолчанию нет, и монтирование, которому кодек нужен, не компилируется.
Всё, что лежит за трейтами и рантаймом, - фичи одного крейта: брокер в памяти, AsyncAPI, метрики, журналирование, OpenTelemetry, тестирование и командная строка. Фичи только добавляют возможности и не меняют поведение друг друга.