RocketMQ-Rust 1.0.0 发布:用 Rust 做消息队列,这次有哪些变化?

我维护的 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,后续更新可以继续关注仓库。

相关推荐
miofly1 小时前
GitHub 今日推荐|company-brain:在 Slack 里给团队装个会主动干活的 AI
开源·github
鬓戈1 小时前
Jev 技术(System One Model)开源模型调研
人工智能·开源
此时不提桶,更待何时2 小时前
06-08-B-RocketMQ面试与生产事故实战
面试·rocketmq
小雨爱测2 小时前
DeepSeek Harness 开源贡献手记:从提 Issue 到合入主干的完整旅程
开源·issue
喵个咪3 小时前
RushWind Admin — 用 Rust 写的企业级中后台,开源了
后端·rust·开源
喵个咪3 小时前
RushWind Admin — 契约驱动:203 条路由零手写的工程化拆解
后端·rust·开源
喵个咪3 小时前
Go 写业务,Rust 扛底盘:一套可落地的混合架构
后端·rust·go
ttwuai4 小时前
Go开源后台管理系统推荐:3个官方仓库怎么按技术栈和适用边界比较?
开发语言·golang·开源
云计算练习生6 小时前
什么是 Linux?从 Unix 到开源生态的完整脉络
linux·开源·操作系统·unix