Брокер 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
Топологии¶
Топологию выбирает один из трёх именованных конструкторов:
// 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 открывается учебником по самому крейту, по разделу на тему:
- Подписка: дескрипторы и ответ каждого из них о повторной доставке, по транспортам (потоки, списки, Pub/Sub), а также пакеты, нативные поля доставки, отложенная повторная доставка, предел доставок и перемотка группы.
- Конвейер: окно подписки, которое подтверждает всю выборку за один обмен с сервером, и команды Redis, которые обработчик ставит в это окно. Они выполняются, только если доставка подтверждена.
- Публикация: политики, шаг ключа партиционирования и транзакции.
- Сгенерированный документ: что документ AsyncAPI говорит о канале Redis и что в него намеренно не попадает.
- Тестирование: собственное приложение сервиса на Redis внутри процесса, что сохраняет модель и что стоит проверять на настоящем сервере.
- Эксплуатация: топологии, учётные данные, TLS и известные ограничения.
Обработчики, роутеры, кодеки и middleware даёт сам фреймворк, а его входные страницы начинаются с сайта RustStream.