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

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

Устройство

Где стоит ruststream-fred: между рантаймом RustStream и клиентом fred, собственный клиент на каждую подписку, один общий пул.

Сверху вниз: сервис, рантайм RustStream, этот крейт, клиент fred и RedisВаш сервисЯдро RustStreamruststream-fredfred#[subscriber]обработчикиRustStream::new(..).with_broker(..)Рантайм: диспетчер, декодирование, завершениеПодписчикипотоков, спискови каналовИздателитех жетрёх формRedisStreamRedisListRedisPubSubОкно конвейера.pipeline()RedisBrokerтопология, пул, учётные данныеСобственный клиентна подпискуПул4 соединенияRedis или Valkey: одиночный, кластер, Sentinel
Схема текстом
  1. Ваш сервис: #[subscriber] обработчики; RustStream::new(..) .with_broker(..)
  2. Ядро RustStream: Рантайм: диспетчер, декодирование, завершение
  3. ruststream-fred: Подписчики потоков, списков и каналов; Издатели тех же трёх форм; RedisStream RedisList RedisPubSub; Окно конвейера .pipeline(); RedisBroker топология, пул, учётные данные
  4. fred: Собственный клиент на подписку; Пул 4 соединения
  5. #[subscriber] обработчики → Рантайм: диспетчер, декодирование, завершение: монтируются
  6. Рантайм: диспетчер, декодирование, завершение → Подписчики потоков, списков и каналов: опрашивает
  7. Рантайм: диспетчер, декодирование, завершение → Издатели тех же трёх форм: публикует
  8. Подписчики потоков, списков и каналов → Собственный клиент на подписку
  9. Издатели тех же трёх форм → Пул 4 соединения
  10. Собственный клиент на подписку → Redis или Valkey: одиночный, кластер, Sentinel
  11. Пул 4 соединения → Redis или Valkey: одиночный, кластер, Sentinel

Крейт реализует трейты брокера из ядра поверх fred. Рантайм над ним один для всех брокеров. Всё, что относится к Redis, находится в этом крейте: дескрипторы трёх транспортов, смысл подтверждения в каждом из них, адрес копии для переобработки и окно конвейера.

Дескриптор разрешается один раз, при запуске, по подключённому брокеру и даёт подписчика. Подписчик - поток доставок, который рантайм опрашивает. Рантайм декодирует каждую доставку, вызывает обработчик и завершает доставку с его исходом. Политика публикации конструирует издателя и при запуске инстанцирует его на подключённом брокере.

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

Запись потока хранит полезную нагрузку в поле _payload, а каждый заголовок - в поле h:<name>, поэтому XADD и XREADGROUP сохраняют и то и другое. Запись списка и сообщение канала хранят заголовки в обёртке вокруг полезной нагрузки: в двоичном кадре или в конверте кодека, если дескриптор указывает кодек.