上一篇文章中我們已經介紹過rocketmq的集群環境搭建,然而在源碼的學習中我們還需要進行本地的調試和問題的定位查找,畢竟還是在本地方便些,今天就說一說如何進行源碼的本地調試
下載編譯
對於rocketmq源碼部分的學習,我們當然要先去官網將源碼下載到本地,這里筆者使用的是4.5.2版本,從github上官網上下載:
https://github.com/apache/rocketmq
rocketmq版本:4.5.2
使用clean install編譯,這里最好跳過test,要不太慢了


編譯完成之后開始本地部署調試環境
單點環境配置
本地啟動和集群部署順序相同主要是兩個,先啟動namesrv再啟動broker ,之前我有講解過啟動腳本,如果你有印象的話,主要涉及到的2個入口類如下,找到對應的啟動類:
- namesrv: org.apache.rocketmq.namesrv.NamesrvStartup
- broker: org.apache.rocketmq.broker.BrokerStartup


在啟動前將distribution下的conf下的,broker.conf,logback_broker.xml,logback_namesrv.xml放置到本地對應的文件夾下,我這里放到了E:\rocketmq\conf下,啟動時添加參數進行加載
由於程序大多數默認地址都是設置的user.home開頭,我們需要進行修改,這里broker.conf文件參數修改如下:
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
#nameServer 地址 分號分割
namesrvAddr=127.0.0.1:9876
#存儲路徑
storePathRootDir=E:\\rocketmq\\store
#commitLog 存儲路徑
storePathCommitLog=E:\\rocketmq\\store\\commitlog
消費隊列存儲路徑
storePathConsumeQueue=E:\\rocketmq\\store\\consumequeue
消息索引|存儲路徑
storePathindex=E:\\rocketmq\\store\\index
#checkpoint 文件存儲路徑
storeCheckpoint=E:\\rocketmq\\store\\checkpoint
#abort 文件存儲路徑
abortFile=E:\\rocketmq\\store\\abort
同樣注意,不要有空格,空格會導致文件路徑不正確,啟動不了!
logback文件同時也要進行修改,為了區分namesrv和broker日志,用了兩個文件夾
在logback_namesrv.xml中修改:${user.home}修改為E:/rocketmq/namesrvlog
在logback_broker.xml中修改:${user.home}修改為E:/rocketmq/brokerlog
至此基本的配置環境已經准備完畢
單點環境啟動
設置ROCKETMQ_HOME環境變量,讓應用找到配置文件,不設置則報錯(源碼部分可看出來),另外設置時一定要注意不要有空格,有空格也報錯,如下:

idea中設置環境變量:

啟動namesrv服務:

繼續啟動broker,同樣設置環境變量ROCKETMQ_HOME,然后BrokerStartup run啟動下,可以看到報錯,已經指定了ROCKETMQ_HOME怎么還報這個?因為未指定broker.conf配置文件,在集群部署的時候腳本后面參數這里也是有這個的,這里指定:
-c E:\rocketmq\conf\broker.conf


這里需要注意如果未配置namesrv也會啟動成功,此時未連接namesrv,最好去看下log日志確認下是否連接成功
日志部分可去查看brokerlog\logs\rocketmqlogs和namesrvlog\logs\rocketmqlogs的日志內容,如啟動有問題控制台看不出來,可以在這里查看詳細的啟動日志信息,或調整日志配置文件等級查看更詳細的內容
接下來通過org.apache.rocketmq.example.quickstart包快速啟動生產者和消費者來進行本地測試,設置namesrv地址,producer.setNamesrvAddr("127.0.0.1:9876"),啟動生產者org.apache.rocketmq.example.quickstart.Producer

消費者同樣設置namesrv地址,consumer.setNamesrvAddr("127.0.0.1:9876"),啟動消費者org.apache.rocketmq.example.quickstart.Consumer

console
為了本地觀察的方便,將console也進行本地啟動,便於本地調試觀察,源碼地址為:
https://github.com/apache/rocketmq-externals/tree/master/rocketmq-console
我在本地將源碼中新建了個模塊,將代碼導入,方便本地啟動

同樣添加啟動配置namesrv地址:

啟動之后瀏覽器訪問8080端口成功

至此單點環境算是搭建完畢,之后源碼學習調試可以在此基礎上進行了
雙master環境配置
集群環境就不搭建slave了,直接雙master來本地調試就好,先進行配置文件的修改,文件放置在E:\rocketmq\conf\2m下:
broker-a 配置文件:
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
#Broker 對外服務的監聽端口
listenPort=10911
#nameServer 地址 分號分割
namesrvAddr=127.0.0.1:9876
#存儲路徑
storePathRootDir=E:\\rocketmq\\2m\\store-a
#commitLog 存儲路徑
storePathCommitLog=E:\\rocketmq\\2m\\store-a\\commitlog
消費隊列存儲路徑
storePathConsumeQueue=E:\\rocketmq\\2m\\store-a\\consumequeue
消息索引|存儲路徑
storePathindex=E:\\rocketmq\\2m\\store-a\\index
#checkpoint 文件存儲路徑
storeCheckpoint=E:\\rocketmq\\2m\\store-a\\checkpoint
#abort 文件存儲路徑
abortFile=E:\\rocketmq\\2m\\store-a\\abort
broker-b 配置文件:
brokerClusterName = DefaultCluster
brokerName = broker-b
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
#Broker 對外服務的監聽端口
listenPort=10921
#nameServer 地址 分號分割
namesrvAddr=127.0.0.1:9876
#存儲路徑
storePathRootDir=E:\\rocketmq\\2m\\store-b
#commitLog 存儲路徑
storePathCommitLog=E:\\rocketmq\\2m\\store-b\\commitlog
消費隊列存儲路徑
storePathConsumeQueue=E:\\rocketmq\\2m\\store-b\\consumequeue
消息索引|存儲路徑
storePathindex=E:\\rocketmq\\2m\\store-b\\index
#checkpoint 文件存儲路徑
storeCheckpoint=E:\\rocketmq\\2m\\store-b\\checkpoint
#abort 文件存儲路徑
abortFile=E:\\rocketmq\\2m\\store-b\\abort
注意其中的配置要寫不同的端口避免沖突
日志部分自行參考單點環境配置下,這里不再介紹,也可以不設置直接啟動,這里先啟動broker-a
-c E:\rocketmq\conf\2m\broker-a.conf

同樣的方式啟動broker-b,檢查下日志沒有報錯就可以,同時可在console中觀察集群是否部署成功

總結
本文主要針對本地調試環境搭建進行一個說明,本身而言並不復雜,凡事都要自己動手去嘗試,也許中間會出現各種各樣的問題,但是解決了之后會對其印象更加深刻吧
以上內容如有問題歡迎指出,筆者驗證后將及時修正,謝謝