Skip to content

Commit 9a8e19f

Browse files
author
yangjingjing
committed
init blog
1 parent 301ee05 commit 9a8e19f

23 files changed

+9632
-0
lines changed
Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
# 阅读环境准备
2+
3+
工欲善其事,必先利其器。想要阅读RocketMQ源码,首先需要确定阅读的源码版本,版本不同,其功能特性会存在区别,功能的实现细节也会存在区别。另外,还要配置RocketMQ的运行环境变量。本文主要从以下三个方面讲述阅读RocketMQ源码的准备工作:
4+
5+
1. 下载版本为4.7.0的RocketMQ源码
6+
2. 配置RocketMQ启动的环境变量
7+
3. 启动namesrv和broker
8+
9+
### 下载版本为4.7.0的RocketMQ源码
10+
11+
官方仓库 https://github.com/apache/rocketmq
12+
13+
首先在github上下载版本为4.7.0的RocketMQ,下载地址如下:
14+
15+
```text
16+
https://github.com/apache/rocketmq/tree/rocketmq-all-4.7.0
17+
```
18+
19+
源码的目录结构和模块的作用如下:
20+
21+
```text
22+
rocketmq-rocketmq-all-4.7.0
23+
├─acl #用户权限、安全、验证相关模块
24+
├─broker # Broker主要负责消息的存储、投递和查询以及服务高可用保证,
25+
├─client # 生产者、消费者、管理等客户端相关模块
26+
├─common # 公用数据结构等
27+
├─distribution # 分布式集群相关的脚本以及配置文件,编译模块,编译输出等
28+
├─docs # 文档
29+
├─example # 示例,比如生产者和消费者
30+
├─filter # 有关消息过滤相关的功能模块
31+
├─logappender # 各种日志的追加器
32+
├─logging # 日志功能
33+
├─namesrv # 简单注册中心,路由管理以及Broker管理
34+
├─openmessaging # 对外提供服务
35+
├─remoting # 网络通信相关模块,远程调用接口,封装Netty底层通信
36+
├─srvutil # namesrc 模块的相关工具,提供一些公用的工具方法,比如解析命令行参数
37+
├─store # 消息存储相关模块
38+
├─test # 测试相关模块
39+
└─tools # 工具类模块,命令行管理工具,如mqadmin工具
40+
```
41+
42+
RocketMQ源码主要的模块包括namesrv、broker、client、remoting、store,源码分析主要也是涉及到这几个模块。阅读RocketMQ源码前,首先阅读下docs文档,了解RocketMQ的基本概念、架构以及设计思路,这一步是非常重要的。然后将example模块的案例看看,了解下RocketMQ的基本使用,阅读完这两个模块,对阅读RocketMQ源码奠定了基础。
43+
44+
### 配置RocketMQ启动的环境变量
45+
46+
创建一个文件目录/RocketMQ,并在/RocketMQ文件目录下创建conf、logs以及store是三个目录,并将distribution模块下的/conf的broker.conf、logback_broker.xml、logback_namesrv.xml文件拷贝在/RocketMQ/conf目录下。具体的目录形式如下:
47+
48+
```text
49+
D:(D盘,根据自己需求在某盘创建文件)
50+
├─RocketMQ
51+
│ ├─conf
52+
│ │ │ ├─broker.conf
53+
│ │ │ ├─logback_broker.xml
54+
│ │ │ ├─logback_namesrv.xml
55+
│ ├─logs
56+
│ ├─store
57+
```
58+
59+
创建并拷贝好上述文件以后,接下来需要修改broker.conf、logback_broker.xml、logback_namesrv.xml文件的内容,broker.conf的修改内容如下:
60+
61+
```text
62+
brokerClusterName = DefaultCluster
63+
brokerName = broker-a
64+
brokerId = 0
65+
deleteWhen = 04
66+
fileReservedTime = 48
67+
brokerRole = ASYNC_MASTER
68+
flushDiskType = ASYNC_FLUSH
69+
70+
# 这是存储路径,你设置为你的rocketmq运行目录的store子目录
71+
storePathRootDir=D:\RocketMQ\store
72+
73+
# 这是commitLog的存储路径
74+
storePathCommitLog=D:\RocketMQ\store\commitlog
75+
76+
# consume queue文件的存储路径
77+
storePathConsumeQueue=D:\RocketMQ\store\consumequeue
78+
79+
# 消息索引文件的存储路径
80+
storePathIndex=D:\RocketMQ\store\index
81+
82+
# checkpoint文件的存储路径
83+
storeCheckpoint=D:\RocketMQ\store\checkpoint
84+
85+
# abort文件的存储路径
86+
abortFile=D:\RocketMQ\abort
87+
```
88+
89+
修改以后保存broker.conf,对logback_namesrv.xml和logback_broker.xml文件进行修改,将文件中所有**${user.home}**替换成**D:\rocketMqConfig**
90+
91+
### 启动namesrv和broker
92+
93+
broker的启动因为依赖namesrv,所以首先启动namesrv。在namesrv模块中找到NamesrvStartup类,启动NamesrvStartup类的main方法。当你启动NamesrvStartup的main方法的时候,你会发现启动失败,是因为还需要配置下启动项,主要在如下配置**ROCKETMQ_HOME=D:\RocketMQ**,D:\RocketMQ文件就是你在上述的配置目录。
94+
95+
```text
96+
ROCKETMQ_HOME=D:\RocketMQ
97+
```
98+
99+
namesrv启动环境变量配置截图如下图所示:
100+
101+
![NamesrvStartup](/images/posts/blog/rocketmq/NamesrvStartup.png)
102+
103+
然后就可以启动namesrv了,启动的时候可以打断点进行跟踪namesrv启动的过程,启动成功以后控制台会显示如下信息:
104+
105+
```text
106+
The Name Server boot success. serializeType=JSON
107+
```
108+
109+
命令行中输入 telnet 127.0.0.1 9876 ,看看是否能连接上 RocketMQ Namesrv 。
110+
111+
broker的启动也是跟namesrv启动一样,在broker模块找到BrokerStartup类,启动BrokerStartup的main方法。也是需要配置环境变量的,如下:
112+
113+
```text
114+
ROCKETMQ_HOME=D:\RocketMQ;NAMESRV_ADDR=127.0.0.1:9876
115+
```
116+
117+
broker启动环境变量配置截图如下图所示:
118+
119+
![BrokerStartup](/images/posts/blog/rocketmq/BrokerStartup.png)
120+
121+
当你看到控制台显示如下信息时,说明broker也启动成功了。
122+
123+
```text
124+
The broker[DESKTOP-DFA24F11, 10.1.70.191:10911] boot success. serializeType=JSON and name server is 127.0.0.1:9876
125+
```
126+
127+
妥妥的,原来 RocketMQ Broker 已经启动完成,并且注册到 RocketMQ Namesrv 上。
128+
129+
命令行中输入 telnet 127.0.0.1 10911 ,看看是否能连接上 RocketMQ Broker 。
130+
131+
当准备好以上条件以后,就万事俱备了,就可以开始阅读RocketMQ源代码。

0 commit comments

Comments
 (0)