18 張圖 | 一文帶你搭建 RocketMQ 源碼調試環境
大家好,我是悟空呀。
前言
最近在倒騰 RocketMQ 消息隊列,小卷了下 RocketMQ 的源碼,本篇會帶著大家一起看下如何配置好調試源碼的環境。
一、獲取源碼
首先就是到 Github 網站上下載源碼。
源碼地址:https://github.com/apache/rocketmq/releases
我下載的是這個版本:rocketmq-rocketmq-all-4.9.2。
如果遇到 Github 網站的打開速度較慢,可以在公眾號后臺回復 RocketMQ源碼 即可獲取百度網盤鏈接。
二、導入源碼
下載好了后,用 IntelliJ IDEA 工具導入就可以了。
下面是對各個文件夾相關功能的解釋:
broker:RocketMQ 的 Broker 相關的代碼,用來啟動 Broker 進程。重點要看的。
client:RocketMQ 的 Producer、Consumer 這些客戶端的代碼,用來生產消息、消費消息。
common:公共模塊。
dev:開發相關的一些信息。
distribution:用來部署 RocketMQ 的,比如 bin 目錄 ,conf 目錄。
example:使用 RocketMQ 的例子。
filter:RocketMQ 的一些過濾器。
logappender:RocketMQ 日志相關的。
logging:RocketMQ 日志相關的。
namesvr:NameServer 的源碼。重點要看的。
openmessaging:開放消息標準,可以先忽略。
remoting:RocketMQ 的遠程網絡通信模塊的代碼,基于netty實現。重點要看的。
srvutil:里面有很多工具類。
store:消息如何在Broker上進行存儲的。重點要看的。
style:代碼檢查相關的。
test:測試相關的。
tools:命令行監控工具相關。
我們看源碼是不是直接就各種文件都看一遍呢?當然不是,首先得把項目跑起來吧,接下來看下如何讓 RocketMQ 的 NameServer 和 Broker 啟動起來。NameServer 就是所有 Broker 都需要注冊的地方,注冊中心。Broker 就是用來收客戶端發的消息、存儲消息傳、遞消息給消費端的組件。
三、啟動 RocketMQ 的 NameServer
3.1 配置 NameServer 啟動參數
因為在本地直接啟動源碼是起不來的,需要單獨配置下啟動參數。
3.1.1 Edit Configurations
首先在 IDEA 工具的菜單欄中找到 NameSrvStartup 啟動的地方,然后下拉選擇 Edit Configurations,可以打開 NameSrvStartup 的配置項。如下圖所示:
3.1.2 環境變量
需要配置一個 ROCKETMQ_HOME 環境變量,它就是一個本地文件夾,專門用來存放一些配置文件,這個文件夾的名字后面還會用到。
打開配置環境變量的界面,如下圖所示,點下這個按鈕就可以了:
然后我們點下加號,配置 ROCKETMQ_HOME 環境變量,文件夾路徑我是配置在這里的,大家可以自己配置,注意不要和 RocketMQ 源碼目錄里面。
/Users/wukong/00.Study/_workspace/rocketmq/ROCKETMQ_HOME
3.1.3 拷貝配置文件
首先在 ROCKMQ_HOME 目錄新建幾個文件夾:conf、logs、store。
然后我們需要 RoctetMQ 自帶的配置文件拷貝到 conf 目錄下。
配置文件就是需要從源碼目錄中 distribution 目錄下 拷貝三個文件:broker.conf、logback_namesrv.xml、logback_broker.xml。
3.1.4 修改 logback 日志配置文件
然后打開logback_namesrv.xml 和 logback_broker.xml 文件,將 ${user.home} 全局替換為之前配置的 ROCKETMQ_HOME 目錄。
/Users/wukong/00.Study/_workspace/rocketmq/ROCKETMQ_HOME
替換后的配置如下圖所示:
3.1.5 修改 broker 配置文件
打開 conf 目錄下的 broker.xml 文件,拷貝下面的配置到文件中。
注意:brokerIP1 對應的 IP 地址是自己本機 IP。存儲路徑對應 ROCKETMQ_HOME 的 store 目錄。
# 這是nameserver的地址
namesrvAddr=127.0.0.1:9876
brokerIP1=192.168.10.197
# 這是存儲路徑,你設置為你的rocketmq運行目錄的store子目錄
storePathRootDir=<你自己的 ROCKETMQ_HOME 路徑>/store
# 這是commitLog的存儲路徑
storePathCommitLog=<你自己的 ROCKETMQ_HOME 路徑>/store/commitlog
# consume queue文件的存儲路徑
storePathConsumeQueue=<你自己的 ROCKETMQ_HOME 路徑>/store/consumequeue
# 消息索引文件的存儲路徑
storePathIndex=<你自己的 ROCKETMQ_HOME 路徑>/store/index
# checkpoint文件的存儲路徑
storeCheckpoint=<你自己的 ROCKETMQ_HOME 路徑>/store/checkpoint
# abort文件的存儲路徑
abortFile=<你自己的 ROCKETMQ_HOME 路徑>/store/abort
3.1.6 啟動 NameServer
上面的配置都配置好了,就可以用 IDEA 啟動了,注意,直接可以用 debug 模式啟動。
IDEA 會自動找到 ROCKETMQ_HOME 的環境變量,這個目錄就是 RocketMQ 的運行目錄,里面有新建的 conf、logs、store 目錄。conf 對應配置,logs 對應日志、store 對應數據存儲。
然后我們可以在控制臺看到啟動的日志輸出:
Connected to the target VM, address: '127.0.0.1:52115', transport: 'socket'
The Name Server boot success. serializeType=JSON
四、啟動 RocketMQ 的 Broker
3.1 配置 Broker 的啟動參數
和 NameServer 的啟動參數相似需要配置環境變量,但是 Broker 多了一個 Program arguments 配置項,用來加載指定的配置文件 broker.conf。配置如下:
-c < 你的ROCKETMQ_HOME 目錄>/conf/broker.conf
4.2 啟動 Broker
接著用 debug 模式啟動 broker,可以看到控制臺輸出以下信息:
Connected to the target VM, address: '127.0.0.1:52279', transport: 'socket'
The broker[broker-a, 192.168.10.197:10911] boot success. serializeType=JSON and name server is 127.0.0.1:9876
4.3 查看啟動日志
另外我們到 logs 目錄看下啟動的詳細日志,打開 broker.log 或者 namesrv.log 文件,如下所示:
五、測試發送消息
我們直接用源碼自帶的示例代碼來做測試。文件目錄如下:
打開 Producer.java 文件;
修改如下代碼中的 IP 地址;
producer.setNamesrvAddr("127.0.0.1:9876");
然后在 IDEA 中啟動這個類:
可以看到控制臺打印了輸出結果,成功發送了一條消息。注意:消費者的示例代碼里面,我改成了只發送了一條消息。
接著我們啟動消費者代碼,看下是否成功消費了。同樣需要修改這個配置:
consumer.setNamesrvAddr("127.0.0.1:9876");
然后啟動 Consumer,可以看到成功消費了一條消息:
注意:消息的顯示是用 ASCII 碼來表示的,所以不能直接看出來發送的什么。
好了,本地的源碼調試環境配置完成。
RocketMQ 也是有客戶端界面來查看 RocketMQ 的運行情況的。如下所示: