Перейти к содержанию

Брокер Redis

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

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

ruststream-fred запускает сервис RustStream на Redis. Redis Streams - это журнал, как Kafka: подписка читает его через группу потребителей и подтверждает каждую обработанную запись. Списки и Pub/Sub тоже здесь. С фичей testing тест запускает собственное приложение сервиса на модели Redis внутри процесса, поэтому тестам не нужен сервер.

ruststream = { version = "0.7", features = ["macros"] }
ruststream-fred = "0.7"
serde = { version = "1", features = ["derive"] }

RedisBroker::standalone синхронный и не делает ввода-вывода: соединение рантайм открывает при старте и закрывает при остановке.

Политику публикации вы указываете при регистрации обработчика: RedisPublish для потоков, RedisPubSubPublish для каналов, RedisListPublish для списков. Издателя по этой политике рантайм инстанцирует на подключённом брокере, поэтому публикация до подключения непредставима.

Политика покрывает публикацию целиком, кроме одной настройки самого сообщения. XADD, LPUSH и PUBLISH принимают ключ или канал и значение, поэтому тело обработчика обычно пишет .message(&value).publish() и больше ничего; исключение - ключ партиционирования, шаг этого билдера. Тело, которое его задаёт, импортирует прелюдию этого крейта и называет тип настроек в своём ограничении; см. ключи партиционирования.

Заготовка сервиса

Рабочую заготовку сгенерирует cargo generate, по шаблону на каждый транспорт:

cargo generate --git https://github.com/powersemmi/ruststream-fred templates/redis-stream
cargo generate --git https://github.com/powersemmi/ruststream-fred templates/redis-pubsub
cargo generate --git https://github.com/powersemmi/ruststream-fred templates/redis-list

Топологии

Топологию выбирает один из трёх именованных конструкторов:

crates/ruststream-fred/examples/fred_topologies.rs
// A single server, addressed by URL.
let _standalone = RedisBroker::standalone("redis://localhost:6379");

// A cluster: one reachable seed node is enough, the rest is discovered.
let _cluster = RedisBroker::cluster(["127.0.0.1:7000", "127.0.0.1:7001"]);

// Sentinel: the monitored primary's name, then the sentinels that watch it.
let _sentinel = RedisBroker::sentinel("mymaster", ["127.0.0.1:26379"]);

Где всё остальное

Справочник на docs.rs открывается учебником по самому крейту, по разделу на тему:

Обработчики, роутеры, кодеки и middleware даёт сам фреймворк, а его входные страницы начинаются с сайта RustStream.