Skip to content

第二章 核心概念与架构 v1.0 ​

第一部分 核心架构 ​

一、整体架构 ​

RocketMQ由四个部分组成:NameServer、Broker、Producer、Consumer。

1.NameServer ​

NameServer是RocketMQ的注册中心,负责管理Broker的路由信息。每个Broker启动时会向所有NameServer注册,Producer和Consumer从NameServer获取路由信息。

主要功能:

  • Broker管理:接收Broker的注册和心跳
  • 路由信息管理:维护Topic到Broker的映射关系
  • 提供路由查询:Producer和Consumer查询路由信息

2.Broker ​

Broker是消息存储和转发的服务端,负责接收Producer发送的消息并存储,同时将消息投递给Consumer。

主要功能:

  • 消息存储:将消息持久化到磁盘
  • 消息转发:将消息投递给消费者
  • 高可用:支持主从同步复制

3.Producer ​

Producer是消息的生产者,负责发送消息到Broker。

主要功能:

  • 消息发送:支持同步、异步、单向发送
  • 负载均衡:将消息发送到不同的Broker
  • 故障转移:Broker故障时自动切换

4.Consumer ​

Consumer是消息的消费者,负责从Broker拉取或推送消息进行处理。

主要功能:

  • 消息消费:拉取或接收消息进行处理
  • 负载均衡:多个消费者分摊消息
  • 消费重试:消费失败时自动重试

二、核心概念 ​

1.Topic ​

消息的逻辑分类,Producer将消息发送到特定Topic,Consumer订阅Topic消费消息。

2.Tag ​

消息标签,用于对同一Topic下的消息进行细分。Consumer可以根据Tag过滤消息。

3.Queue ​

Topic的物理分区,每个Topic可以有多个Queue。Queue分布在不同的Broker上。

4.ConsumerGroup ​

消费者组,多个消费者组成一个消费者组。同一组内的消费者分摊消息,不同组独立消费。

5.Offset ​

消息在Queue中的位置,消费者通过Offset记录消费进度。

第二部分 消息模型 ​

一、消息类型 ​

1.普通消息(Normal) ​

最基本的消息类型,Producer发送消息到Topic,Consumer订阅Topic进行消费。

特点:

  • 发送简单,性能高
  • 不保证消息顺序
  • 不支持事务

2.顺序消息(Ordered) ​

保证消息按照发送顺序进行消费。

实现方式:

  • 全局顺序:Topic只有一个Queue,所有消息按顺序消费
  • 分区顺序:相同业务Key的消息按顺序消费,不同Key并行处理
java
// 发送顺序消息
rocketMQTemplate.syncSendOrderly(topic, message, orderId);

3.延时消息(Delayed) ​

消息发送后不会立即投递,而是等待指定时间后才投递给Consumer。

延时等级:

  • 1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h
java
// 发送延时消息,延时3秒
rocketMQTemplate.syncSend(topic, message, 3000);

4.事务消息(Transactional) ​

支持分布式事务,保证消息发送和本地事务的一致性。

实现流程:

  1. Producer发送半消息(Half Message)
  2. Broker存储半消息,对Consumer不可见
  3. Producer执行本地事务
  4. 根据本地事务结果提交或回滚半消息
  5. 如果超时未确认,Broker回查本地事务状态

二、消费模式 ​

1.集群消费(Clustering) ​

同一ConsumerGroup内的消费者分摊消息,每条消息只会被一个消费者消费。

适用场景:大多数业务场景

2.广播消费(Broadcasting) ​

同一ConsumerGroup内的所有消费者都会收到每条消息。

适用场景:配置同步、日志广播

java
// 设置广播消费模式
consumer.setMessageModel(MessageModel.BROADCASTING);