# 源码分析准备
作者:Ethan.Yang
博客:https://blog.ethanyang.cn (opens new window)
# 1. RocketMQ介绍
RocketMQ 是阿里巴巴基于高可用分布式集群技术自研的消息中间件,具备 异步解耦、削峰填谷、海量堆积、高吞吐、可靠重试 等能力,是双 11 核心基础设施之一。
源码中的技术亮点包括:
- 读写锁、原子类
- 零拷贝(MMAP)
- 高性能文件存储
- 线程池与负载均衡
- 并发容器(ConcurrentHashMap / CopyOnWrite)
- 故障延迟机制、堆外内存
- 高可用 HA 同步机制
# 2. RocketMQ核心组件

# NameServer
轻量级注册中心,主要负责:
- 管理 Broker 的路由信息
- Broker 上线/下线的注册与摘除
- 为 Producer / Consumer 提供 Topic → Broker 的路由查询
# Producer / Consumer
客户端实现,用于发送和消费消息。
# Broker
RocketMQ 的核心节点,负责:
- 接收生产与消费请求
- 存储消息、索引构建
- 保障高可用(HA)
- 支持同步双写、异步复制模式
# Store
存储层模块,提供 CommitLog + ConsumeQueue + IndexFile 的完整存储与查询能力。
# Netty Remoting
所有节点间通信均基于 Netty,实现高性能 RPC。
# 3. RocketMQ 的核心三大流程
在源码结构中,RocketMQ 由多个模块组成,各司其职,共同构成完整的消息系统:
# 核心模块概览
- rocketmq-namesrv(注册中心)
负责管理 Broker 的路由信息,为 Producer 和 Consumer 提供 Topic → Broker 的动态路由。
- 路由注册
- 路由删除
- 路由查询
- rocketmq-broker(核心消息节点) 负责接收生产/消费请求,并与存储层协作处理消息。 支持同步双写、异步复制等多种 HA 模式。
- rocketmq-store(存储层) 实现 CommitLog、ConsumeQueue、IndexFile 等消息存储结构,并包含 HA 复制机制。
- rocketmq-remoting(通信层) 基于 Netty 实现 RPC,支撑内部所有组件间的网络通信。
- rocketmq-common(公共模块) 存放通用配置、常量、工具类等基础设施代码。
- rocketmq-client(客户端) Java 版本的 Producer / Consumer 实现。
- rocketmq-filter(消息过滤) 负责 Broker 端/Consumer 端的消息过滤功能,可基于表达式进行筛选。
- rocketmq-srvutil(命令行工具) 提供启动器、命令行解析等辅助能力。
- rocketmq-tools(管理工具) 用于集群管理、消息查询、Topic 管控等运维操作。
尽管模块众多,但真正需要深入理解的核心逻辑主要集中在以下三大流程:
# 3.1启动流程(Booting)
- NameServer 启动并监听路由请求
- Broker 启动后向所有 NameServer 注册自身的 Topic、Queue、读写状态等元数据
- Producer / Consumer 启动后从 NameServer 拉取最新路由信息
# 3.2 消息生产流程(Sending)
Producer 根据路由策略选择队列,将消息写入 Broker 的 CommitLog,并根据配置选择同步或异步确认机制。
# 3.3 消息消费流程(Consuming)
Consumer 根据路由信息从 Broker 拉取消息,通过拉模式/推模式处理消息,并维护自己的消费进度(OFFSET),完成消费确认。
# 4. RocketMQ源码下载及安装
# 4.1 下载地址
官方下载地址:http://rocketmq.apache.org/dowloading/releases/
本篇文章以 4.8.0 版本为例
# 4.2 使用IntelliJ IDEA导入安装源码
1)使用IDEA导入已经下载且已经解压后的代码







2)下载且已经解压后的代码导入后执行Maven命令install:
mvn install -Dmaven.test.skip=true
# 4.3 配置与运行RocketMQ
# 4.3.1 启动NameServer
RocketMQ启动必须先启动NameServer,启动类是namesrv/目录下的NamesrvStartup类,不过在运行这个类之前必须要配置环境变量ROCKETMQ_HOME,变量值为RocketMQ的运行主目录。

RocketMQ的运行主目录一般使用新建的方式,同时在运行主目录中创建conf、logs、store三个文件夹,然后从源码目录中distribution目录下的中将broker.conf、logback_broker.xml、logback_namesrv.xml复制到conf目录中。


最后运行namesrv/目录下的NamesrvStartup类的main方法,NameServer启动成功!

# 4.3.2 启动Broker
在broker模块找到broker模块,同时找到启动类BrokerStartup.java

源码启动前需要修改配置文件broker.conf (修改RocketMQ的消息存储路径)

配置环境变量,同时启动时需要加入参数(指定启动的配置文件)

# 4.4 控制台安装及部署
# 4.4.1 下载
老版本地址下载:https://codeload.github.com/apache/rocketmq-externals/zip/master (opens new window)
解压后如图(以下使用的是老版本,新版本参考老版本即可)

# 4.4.2 配置
后端管理界面是一个Java工程,独立部署,同时也需要根据不同的环境进行相关的配置。
控制台端口及服务地址配置:
下载完成之后,进入‘\rocketmq-console\src\main\resources’文件夹,打开‘application.properties’进行配置。

进入‘\rocketmq-externals\rocketmq-console’文件夹,执行‘mvn clean package -Dmaven.test.skip=true’,编译生成运行jar包。

编译成功之后,cmd命令进入‘target’文件夹,执行‘java -jar rocketmq-console-ng-2.0.0.jar’,启动‘rocketmq-console-ng-2.0.0.jar’。

浏览器中输入‘127.0.0.1:8089’,成功后即可进行管理端查看。
