跳到主要内容

基本概念

理解 RocketMQ-Rust 的核心概念,是构建高效消息应用的基础。

核心组件

消息(Message)

消息是 RocketMQ 中最基础的通信单元。每条消息通常包含:

  • Topic:消息所属的主题类别
  • Body:实际消息体数据(字节数组)
  • Tags:可选标签,用于在同一主题内做消息过滤
  • Keys:可选消息键,用于索引与查询
  • Properties:额外的键值元数据
use rocketmq_common::common::message::message_single::Message;

let message = Message::builder()
.topic("TopicTest")
.body("Hello")
.tags("tag1")
.key("key1")
.build()?;

主题(Topic)

Topic 是消息的逻辑分组。生产者向 Topic 发送消息,消费者订阅 Topic 消费消息。

Topics 会被划分为多个队列,以支持并行处理和负载分摊。

Topic: OrderEvents
├── Queue 0
├── Queue 1
├── Queue 2
└── Queue 3

生产者(Producer)

生产者是向 RocketMQ Broker 发送消息的应用端。

关键特性:

  • 异步发送
  • 事务消息
  • 失败重试机制
  • 跨 Broker 负载均衡
use rocketmq_client_rust::producer::default_mq_producer::DefaultMQProducer;
use rocketmq_client_rust::producer::mq_producer::MQProducer;

let mut producer = DefaultMQProducer::builder()
.producer_group("example_group")
.name_server_addr("localhost:9876")
.build();
producer.start().await?;
producer.send(message).await?;

消费者(Consumer)

消费者负责从 RocketMQ Broker 接收并处理消息。

消费者类型:

  • Push Consumer:消息由 Broker 主动推送到消费者
  • Pull Consumer:消费者主动从 Broker 拉取消息
use rocketmq_client_rust::consumer::default_mq_push_consumer::DefaultMQPushConsumer;
use rocketmq_client_rust::consumer::mq_push_consumer::MQPushConsumer;

let mut consumer = DefaultMQPushConsumer::builder()
.consumer_group("example_group")
.name_server_addr("localhost:9876")
.build();
consumer.subscribe("TopicTest", "*").await?;
consumer.start().await?;

Broker

Broker 是 RocketMQ 的服务端,负责消息存储与投递,主要能力包括:

  • 消息存储与持久化
  • 消息查询
  • 消费位点(offset)管理
  • 通过复制提供高可用

Name Server

Name Server 是轻量级路由服务,主要提供:

  • Broker 路由信息
  • Topic 到 Broker 的映射
  • 心跳管理

Broker 启动后会向 Name Server 注册,客户端通过 Name Server 发现可用 Broker 地址。

消息模型

集群模式(默认)

在集群模式下,同一消费组内的消息会被分配给不同消费者,每条消息只会被其中一个消费者处理。

Consumer Group: OrderProcessors
├── Consumer A → Queue 0, Queue 1
├── Consumer B → Queue 2, Queue 3
└── Consumer C → Queue 4, Queue 5

Message M1 (Queue 0) → Consumer A only
Message M2 (Queue 2) → Consumer B only

广播模式

在广播模式下,同一 Topic 的每条消息都会被消费组内所有消费者接收。

Consumer Group: LogAggregators
├── Consumer A → All messages
├── Consumer B → All messages
└── Consumer C → All messages

Message M1 → Consumer A, B, and C

消息投递语义

至少一次(默认)

RocketMQ 默认保证每条消息至少投递一次,这意味着:

  • 消息不会丢失
  • 可能出现重复消息
  • 消费端应实现幂等处理

有序性保证

队列内有序:同一队列中的消息按 FIFO 顺序消费。

队列间无序:同一 Topic 的不同队列之间不保证全局顺序。

如需严格顺序,请使用单队列,或通过消息队列选择器固定路由。

消费组(Consumer Group)

消费组是多个消费者的逻辑集合,它们协同消费同一 Topic 的消息。

关键属性:

  • 组内消费者共享同一个 group name
  • 在集群模式下,每条消息只会被组内一个消费者处理
  • 组内自动进行负载均衡
  • 每个消费组维护独立的消费位点
let mut consumer = DefaultMQPushConsumer::builder()
.consumer_group("my_consumer_group")
.name_server_addr("localhost:9876")
.build();

下一步

掌握基本概念后,你可以继续阅读: