英文版本为准
本页译自英文,由模型翻译。若与英文原文存在差异,以英文原文为准。
设计
核心不认识任何 Broker:Broker crate 实现核心的 trait,并持有该 Broker 的全部设置。
以文字阅读本图
- 你的服务: #[subscriber] 处理器; #[ruststream::app] 构建函数
- ruststream: 运行时:路由、分发、 确认、发布; 编解码器:JSON、CBOR、 MessagePack 或不用, 在编译期选定; 特性:内存 Broker、 AsyncAPI、指标、 OpenTelemetry、测试; Broker, Subscriber, Publisher, sources, policies; 能力:批量、事务、 请求与应答、 定位读取
- Broker crate: ruststream-nats subject、stream、 策略、设置、 挂载步骤; ruststream-rdkafka topic、消费组、 策略、设置、 挂载步骤
- #[subscriber] 处理器 → 运行时:路由、分发、 确认、发布: 挂载到
- ruststream-nats subject、stream、 策略、设置、 挂载步骤 → Broker, Subscriber, Publisher, sources, policies: 实现
- ruststream-rdkafka topic、消费组、 策略、设置、 挂载步骤 → 能力:批量、事务、 请求与应答、 定位读取: 实现
- ruststream-nats subject、stream、 策略、设置、 挂载步骤 → async-nats: 封装
- ruststream-rdkafka topic、消费组、 策略、设置、 挂载步骤 → rdkafka: 封装
核心不依赖任何 Broker 客户端。必需的 trait 只有三个:连接的生命周期、以 Stream 形式交付消息的订阅者,以及发布者。批量、事务、请求与应答、定位读取,以及消息本身已携带的值,都是能力 trait;只有客户端支持时,Broker 才实现它们。
Broker 的专有概念都在它自己的 crate 里:订阅形式的描述符、发布者的策略、单条消息的设置,以及读取挂载链设置的挂载步骤。核心里没有任何 Broker 专属的设置,也没有它们的默认值。
编解码器是一个类型:挂载时指定的编解码器,或由启用的特性选出的默认编解码器。没有启用任何编解码器特性时就没有默认值,需要编解码器的挂载无法通过编译。
trait 和运行时之外的一切,都是这一个 crate 的 cargo 特性:内存 Broker、AsyncAPI、指标、日志、OpenTelemetry、测试和命令行。特性只会增加功能,不会改变其他特性的行为。