英文版本为准
本页译自英文,由模型翻译。若与英文原文存在差异,以英文原文为准。
路径
一个流条目在 RustStream 服务中的路径:追加、组读取、投递、处理器、应答和 XACK。
以文字阅读本图
- XADD 一个 _payload 字段和若干 h: 字段 → XREADGROUP 最多 64 个条目,在读取客户端上
- XREADGROUP 最多 64 个条目,在读取客户端上 → RedisMessage 字段变成载荷和消息头
- RedisMessage 字段变成载荷和消息头 → 分发 运行时的循环或它的工作任务
- 分发 运行时的循环或它的工作任务 → 解码 把载荷解码成处理器的类型
- 解码 把载荷解码成处理器的类型 → 订阅者的处理器 #[subscriber] 下的 async fn
- 订阅者的处理器 #[subscriber] 下的 async fn → 应答 在连接池的连接上 XADD
- 应答 在连接池的连接上 XADD → 结算 由结果决定
- 结算 由结果决定 → XACK 在连接池的连接上
一次读取在一次往返中返回最多 64 个条目,订阅把它们逐个交出,交完之后再读取。批处理器则按自己的批大小读取条目。流里没有新内容时,读取会阻塞订阅的 block 间隔,默认五秒。
每个条目变成一个 RedisMessage:_payload 字段是载荷,每个 h: 字段是一个消息头。运行时解码载荷并调用处理器。
应答经过编码,在连接池的一个连接上用 XADD 发布,之后投递才结算。列表读取和 Pub/Sub 消息从投递开始走同样的路,只是各按自己形式的方式结算,结算一页用图说明了这一点。