|
| 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 | + |
| 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 | + |
| 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