跳转至

Redis Broker

英文版本为准

本页译自英文,由模型翻译。若与英文原文存在差异,以英文原文为准。

ruststream-fred 让 RustStream 服务跑在 Redis 上。 Redis Streams 是一个日志,和 Kafka 一样:订阅通过消费者组读取它,并对处理过的每个条目做 ack。 列表和 Pub/Sub 也在这个 crate 里。开启 testing feature 后,测试在进程内模拟的 Redis 上运行服务 自己的应用,因此不需要 Redis 服务器。

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

RedisBroker::standalone 是同步的,不做 I/O:连接由运行时在启动时打开,在关闭时断开。

发布策略你在注册处理器时指定:流用 RedisPublish,频道用 RedisPubSubPublish,列表用 RedisListPublish。运行时按这个策略在已连接的 Broker 上实例化发布者,因此发布无法早于连接发生。

策略覆盖整次发布,只留一项设置给消息自己。XADD、LPUSH 和 PUBLISH 接收键或频道以及值,因此 处理器函数体通常只写 .message(&value).publish(),别的什么都不写;例外是分区键,它是发布构建器上 的一个步骤。设置它的函数体导入本 crate 的 prelude,并在自己的约束里写出设置类型;见分区键。

生成服务骨架

用 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 上的参考文档以这个 crate 自己的教程开篇,一个主题一节:

处理器、路由器、编解码器和中间件都来自框架本身,它的入口页面从 RustStream 站点开始。