我维护的 RocketMQ-Rust 发布 1.0.0 了。这篇文章介绍一下项目能做什么、这个版本值得关注的变化,以及怎么在本地跑通第一条消息。
项目地址:mxsm/rocketmq-rust
从 Rust 客户端到消息服务
RocketMQ-Rust 是 Apache RocketMQ 的非官方 Rust 实现,采用 Apache-2.0 开源协议。它围绕 RocketMQ 的消息协议和使用方式,提供 Rust 客户端、NameServer、Broker、Controller、Proxy,以及管理工具。
对业务开发者来说,可以从 Rust 客户端接入开始;对关注中间件实现的同学来说,也可以顺着消息发送、路由查询、存储、消费这条链路看代码。NameServer 负责注册与路由,Broker 负责消息存储和投递,客户端提供生产和消费接口,各部分都有独立的职责。
客户端包含普通生产者、事务生产者、Push Consumer 和 Lite Pull Consumer。仓库还提供批量、顺序、延迟、事务、请求应答等消息场景的接口或示例。实际接入时,要结合 Broker 的配置和能力验证所用场景,例如 SQL92 订阅需要服务端支持相应过滤能力。
1.0 更值得看的是这些工程变化
第一,运行时的所有权更明确了。 应用创建 RuntimeOwner,再把服务上下文交给客户端运行时。生产者和消费者可以共享 ClientRuntime,库内部不会偷偷创建一个兜底 Tokio runtime。
这个变化会直接影响接入代码:启动需要处理失败,关闭时也要按顺序释放客户端、共享运行时和 owner,并检查关闭报告。对于一个长期运行的消息服务,任务归谁管理、退出时是否收干净,和发送接口本身一样重要。
第二,核心模块的边界进一步拆开了。 协议、传输、存储、安全、可观测性、错误类型都有各自的核心 crate。消息模型和 wire 类型也有独立归属,便于阅读代码、复用能力和定位问题。
第三,发布和部署的路径更完整了。 这次发布体系覆盖 27 个核心 crates 和 13 个 Docker Hub 镜像,镜像目标平台为 linux/amd64,并纳入 SBOM、漏洞扫描和签名。使用镜像时仍需配置认证、网络和持久化目录,具体组件见发布与容器配置文档。
Dashboard Web、MCP 和 SRE 也作为独立服务组件提供。需要注意,它们的独立 API 不属于核心 1.0 兼容范围,接入前请分别查看对应文档。
本地跑通第一条消息
下面按 v1.0.0 的 README 操作,使用 Rust 1.95.0。命令以 Linux/macOS 为例,各终端都进入仓库根目录。
先拉取发布标签并构建:
bash
git clone --branch v1.0.0 --depth 1 https://github.com/mxsm/rocketmq-rust.git
cd rocketmq-rust
cargo build --workspace
启动 NameServer,保持这个终端运行:
bash
cargo run --bin rocketmq-namesrv-rust -- --ip 127.0.0.1 --port 9876
另开终端,设置 Broker 的运行目录并启动:
bash
export ROCKETMQ_HOME="$(pwd)/.rocketmq"
mkdir -p "$ROCKETMQ_HOME/conf"
cargo run --bin rocketmq-broker-rust -- -n 127.0.0.1:9876
再分别打开两个终端,先启动消费者,再运行生产者:
bash
# 消费者终端
cargo run -p rocketmq-client-rust --example consumer
# 生产者终端
cargo run -p rocketmq-client-rust --example producer
示例默认连接 127.0.0.1:9876,使用 TopicTest。跑通后,建议再看客户端文档,理解运行时初始化、消息监听和关闭流程,再接到自己的应用里。
第一次体验建议把目标设小一点:先确认路由可见、发送返回成功、消费者收到消息,再验证重启后的行为。随后逐步加入批量消息、消费失败重试、顺序消费等场景。每次只改变一项配置,更容易判断问题出在连接、订阅还是存储环节。
阅读源码也可以沿着这条路径展开:先看生产者示例如何构造消息,再看协议请求如何进入 Broker,最后追踪消息写入与消费位点。对想参与贡献的同学,一个能稳定复现的测试用例通常就是很好的起点。
从 0.9 升级,先看兼容边界
0.9 到 1.0 存在 Rust 源码 API 变化。例如客户端运行时改为通过 ClientRuntime::try_new 处理初始化错误,请求头派生宏统一为 RequestHeaderCodec。旧项目应先对照API 迁移指南修改,再做回归验证。
Broker 升级前保留配置和数据备份;降级前执行文档要求的预检。Controller HA 是 Rust 原生实现,不应组建 Java/Rust 混合 Controller 集群,也不能把协议互通理解成可以直接接管 Java Broker 的数据目录。具体以升级与回滚指南为准。
1.0 是一次版本发布,具体环境的上线判断仍需要故障恢复、持续运行和性能测试。吞吐、延迟和资源占用,也欢迎大家在相同硬件与配置下做可复现的验证。
欢迎来试,也欢迎一起完善
如果你在用 Rust 接入消息队列,或者想了解消息中间件的内部实现,可以拉下来试试。使用问题、复现用例、文档改进和 PR 都欢迎;提 Issue 时附上版本、配置和最小复现,定位会更方便。
觉得项目有用,也欢迎点个 Star,后续更新可以继续关注仓库。