跳到主要内容
v1.0.0 已发布至 crates.io发布说明

分布式消息, 以 Rust 重铸。

RocketMQ-Rust 是由社区构建的 Apache RocketMQ Rust 实现:NameServer、Broker、Proxy、Controller 与异步客户端一应俱全,内存安全、全程非阻塞,并支持 RocketMQ Remoting 与 gRPC 协议。

原生支持 顺序消息, 延迟消息, 事务消息, 批量消息, 请求-应答消息

cargo add rocketmq-client-rust
向下探索
  • 顺序消息
  • 延迟投递
  • 事务消息
  • 批量发送
  • 请求-应答
  • Push 消费
  • LitePull 消费
  • POP 消费
  • Tag 与 SQL92 过滤
  • ACL 授权
  • TLS 传输
  • Raft Controller
  • gRPC Proxy
  • 分层存储
  • Tokio
  • Tonic gRPC
  • OpenRaft
  • RocksDB
  • OpenTelemetry
  • Prometheus
  • Rustls
  • Serde
  • Ratatui
  • Linux
  • macOS
  • Windows
  • Docker
  • Kubernetes
  • crates.io
动态架构

跟随一条消息,从生产到消费

路由发现、发送、持久化、复制与投递:RocketMQ 模型的每一跳,都以异步 Rust 实现。

BROKER 组NameServer路由注册中心 · :9876Producer异步 Rust 客户端batch · ordered · txnConsumer消费者组Push · LitePull · POPControllerRaft 仲裁ProxygRPC 接入 · :8081cluster · local modeBroker:10911 · remoting主节点CommitLogConsumeQueueBrokerHA 副本从节点CommitLog
  • 控制面
  • 生产
  • 存储与复制
  • 消费
架构总览
为什么选择 RocketMQ-Rust

为核心链路精心打造

你熟悉的 RocketMQ 模型,用一门能把整类运行时故障变成编译错误的语言重新构建。

无需垃圾回收的内存安全

所有权与借用机制在编译期排除数据竞争与释放后使用。没有 GC,消息链路上也就没有 Stop-The-World 停顿。

从 Socket 到磁盘全程异步

基于 Tokio 构建。网络、请求处理与后台服务均为非阻塞,运行时归属明确,关闭过程有序。

原生支持 RocketMQ 协议

实现了 Remoting 协议与 gRPC 消息 API,Rust 与 Java 的客户端和服务端可在文档明确的边界内互通。

可插拔的存储引擎

追加写入的 CommitLog 搭配 ConsumeQueue 与索引文件,另有 RocksDB 后端,以及突破本地磁盘容量的分层存储。

覆盖各类消息模式

支持顺序、延迟、事务、批量与请求-应答消息,可通过 Push、LitePull 或 POP 消费。

基于 Raft 的高可用

基于 Raft 的 Controller 负责协调各 Broker 组的主节点选举与同步副本。

内建安全能力

认证、ACL 授权与 TLS 共同守护客户端与管理端的访问。

为可观测而设计

提供 Prometheus 指标,以及基于 OTLP 的 OpenTelemetry 链路与日志,通过可选的构建特性按需启用。

开发体验

地道的 Rust API

Builder、带类型的返回值与显式的生命周期。没有隐藏线程,也没有意外。

use std::error::Error;use std::sync::Arc;
use rocketmq_client_rust::{ClientRuntime, DefaultMQProducer};use rocketmq_model::common::message::message_single::Message;
async fn produce(client: Arc<ClientRuntime>) -> Result<(), Box<dyn Error>> {    let mut producer = DefaultMQProducer::builder(client)        .producer_group("order_producer")        .name_server_addr("127.0.0.1:9876")        .build();    producer.start().await?;
    let message = Message::builder()        .topic("OrderTopic")        .tags("created")        .body("order-1024")        .build()?;
    if let Some(sent) = producer.send_with_timeout(message, 3_000).await? {        println!("{} at offset {}", sent.send_status, sent.queue_offset);    }
    producer.shutdown().await;    Ok(())}
生态

一个工作区,一整套消息平台

服务、类库与运维工具在同一个仓库中协同演进。

  • 核心服务

    NameServer、Broker、Proxy 与 Controller:RocketMQ 集群中可独立部署的运行时。

    • NameServer
    • Broker
    • Proxy
    • Controller
    架构总览
  • 可复用的 Crate

    客户端 SDK、协议、传输、存储引擎、运行时与认证,均可从 crates.io 单独引入使用。

    • Client
    • Protocol
    • Transport
    • Model
    • Store
    • Runtime
    • Auth
    • Filter
    • Observability
    模块地图
  • 运维与 AI

    Admin CLI 与 TUI、Web 与桌面 Dashboard、MCP 服务以及 AI SRE 工作流。

    • Admin CLI
    • Admin TUI
    • Store Inspect
    • Web Dashboard
    • GPUI Dashboard
    • Tauri Dashboard
    • MCP
    • MCP Control
    • AI SRE
    生态指南
快速开始

从克隆仓库到第一条消息

四个步骤,从源码拉起本地集群,并发出你的第一批消息。

  1. 克隆并构建

    获取工作区源码,使用固定的 Rust 1.95 工具链完成构建。

    git clone https://github.com/mxsm/rocketmq-rust.gitcd rocketmq-rustcargo build --workspace
  2. 启动 NameServer

    Broker 与客户端的路由注册中心,默认监听 127.0.0.1:9876。

    cargo run --bin rocketmq-namesrv-rust
  3. 启动 Broker

    为 Broker 指定存放数据的主目录,并让它连接 NameServer。

    export ROCKETMQ_HOME="$(pwd)/.rocketmq"mkdir -p "$ROCKETMQ_HOME/conf"cargo run --bin rocketmq-broker-rust -- -n 127.0.0.1:9876
  4. 发送与消费

    先启动消费者,再在另一个终端中运行生产者。

    cargo run -p rocketmq-client-rust --example consumercargo run -p rocketmq-client-rust --example producer

与我们一起构建下一代消息系统

RocketMQ-Rust 在开源社区中公开演进。欢迎为仓库点亮 Star、参与讨论,或者认领一个 good first issue。

浏览 good first issue

RocketMQ-Rust 是独立的社区项目,并非 Apache 软件基金会的官方发行版。Apache RocketMQ 是 Apache 软件基金会的商标。