本文主要分如下幾個部分展開:
- linux服務器安裝RocketMQ、RocketMQ-Console
- IDEA中搭建可調試環境
1、Linux安裝RocketMQ、RocketMQ-Console
1.1安裝RocketMQ
Step1:從如下地址下載RocketMQ安裝包
cd /opt/Application
wget https://mirrors.tuna.tsinghua.edu.cn/Apache/rocketmq/4.7.1/rocketmq-all-4.7.1-bin-release.zip
Step2:解壓安裝包
unzip rocketmq-all-4.7.1-bin-release.zip
ls -l
解壓后的文件如下圖所示:
其中 conf 文件夾存放的是RocketMQ的配置文件,提供了各種部署結構的示例配置。例如2m-2s-async是2主2從異步復制的配置示例;2m-noslave是2主的示例配置。由于本文主要是搭建一個學習環境,故采取的部署架構為1主的部署架構,關于生產環境下如何搭建RocketMQ集群、如何調優參數將在該專欄的后續文章中專門介紹。
Step3:修改Nameserver jvm參數
cd bin
vi runserver.sh# 定位到如下代碼JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
# 修改 "-Xms -Xmx -Xmn" 參數
JAVA_OPT="${JAVA_OPT} -server -Xms512M -Xmx512M -Xmn256M -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
溫馨提示:這里修改JVM參數主要目的是個人學習電腦內存不夠,默認NameServer 會占用4G。
Step4:啟動nameserver
nohup ./mqnamesrv &
查看${user_home}/logs/rocketmqlogs/namesrv.log日志文件,如果輸出結果如下圖所示即表示啟動成功。
Step5:修改broker的配置文件
vi conf/broker.conf
# 使用如下配置文件brokerClusterName = DefaultClusterbrokerName = broker-abrokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTERflushDiskType = ASYNC_FLUSHstorePathRootDir=/data/rocketmq/store
storePathCommitLog=/data/rocketmq/store/commitlog
namesrvAddr=127.0.0.1:9876
brokerIP1=192.168.3.10
brokerIP2=192.168.3.10
autoCreateTopicEnable=false
Step6:修改broker jvm參數。
cd bin
vi runbroker.sh #修改如下配置(配置前)JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"
#配置后JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m"
Step7:啟動broker
cd bin
nohup ./mqbroker -c ../conf/broker.conf &
查看${user_home}/logs/rocketmqlogs/broker.log,如果輸出結果如下圖所示表示啟動成功。
經過上面的步驟,就成功在Linux環境上安裝了RocketMQ Nameserver服務器與Broker服務器。
溫馨提示:如果上面在安裝過程中發生了錯誤,大家可以查看${user_home}/logs/rocketmqlogs中的日志,通過錯誤日志,能夠較為直觀的判斷錯誤的原因。其中${user_home}為用戶主目錄。
該目錄下會有眾多的日志文件,如果一開始對這些文件的含義不了解也沒關系,大家可以通過 ls -l 命令,逐一查看文件大小不為0的文件,從而尋找錯誤日志,便于快速解決問題。
RocketMQ提供了眾多的運維命令來查看RocketMQ集群的運行狀態,在這里我先簡單使用clusterList命令來查看集群的狀態,用于驗證一下集群的狀態。
sh ./mqadmin clusterList -n 127.0.0.1:9876
其運行結果如下圖所示:
1.2 安裝RocketMQ-Console
使用運維命令不太直觀,學習成本較大,為此RocketMQ官方提供了一個運維管理界面RokcetMQ-Console,用于對RocketMQ集群提供常用的運維功能,故本節主要講解如何在Linux環境安裝rocketmq-console。
RocketMQ官方并未提供rocketmq-console的安裝包,故需要通過源碼進行編譯。
Step1:下載源碼
wget https://github.com/apache/rocketmq-externals/archive/rocketmq-console-1.0.0.tar.gz
tar -xf rocketmq-console-1.0.0.tar.gz
# 重命名,為了方便后續操作
mv rocketmq-externals-rocketmq-console-1.0.0/rocketmq-console rocketmq-console
Step2:修改配置文件
cd rocketmq-console
vi src/main/resources/applications.properties
主要是修改指向的nameserver地址,修改結果如下圖所示:
Step3:使用maven命令編譯源代碼。
mvn clean package -DskipTests
編譯后在target目錄下會生成可運行的jar包,如下圖所示:
Step4:我們可以將該包復制到自己常用的軟件安裝目錄,例如筆者喜歡將其放在/opt/application下。
cp rocketmq-console-ng-1.0.0.jar /opt/application/
Step5:啟動rocketmq-conolse
nohup java -jar rocketmq-console-ng-1.0.0.jar &
在瀏覽器中輸入:http://localhost:8080查看是否安裝成功,如果出現如下圖則表示安裝成功。
1.3 異常分析與解決思路
如果在安裝過程中出現意想不到的錯誤,別慌,通過查看相關的日志文件,尋找錯誤日志,根據錯誤日志進行思考或百度,相信能夠輕易將其解決。
例如使用的baseuser 啟動的rocketmq,rocketmq-console,那相關的日志路徑如下:
rocketmq:/home/baseuser/logs/rocketmqlogs/
rocketmq-console:/home/baseuser/logs/consolelogs
2、IDEA中安裝RocketMQ
絕大數的程序員最信賴的開發調試工具基本都是DEBUG,那能在 IDEA 中 debug RocketMQ的源碼嗎?答案當然是可以的。本節就來演示如何在IDEA中運行RocketMQ的Nameserver、Broker組件,并進行Debug。
Setp1:從github上下載RocketMQ源碼,并將其導入到IEDA中,其截圖如下:
Step2:namesrv/src/main/java/org/apache/rocketmq/namesrv/NamesrvStartup設置環境變量ROCKETMQ_HOME,操作步驟如下圖所示:
設置環境變量名稱:ROCKETMQ_HOME,其值用于指定RocketMQ運行的主目錄,筆者設置的路徑為:/home/dingwpmz/tmp/rocketmq。
Step3:將distribution/conf/logback_namesrv.xml文件拷貝到【Step2】中設置的主目錄下,執行后的效果如下圖所示:
溫馨提示:該文件為nameserver的日志路勁,可以手動修改logback_namesrv.xml文件中的日志目錄,由于這是logback的基礎知識,這里就不再詳細介紹logback的配置方法。
Step4:以debug方法運行NamesrvStartup,執行效果如下圖所示,表示啟動成功。
Step5:將distribution/conf/logback_brokerxml、broker.conf文件拷貝到【Step2】中設置的主目錄下,執行后的效果如下圖所示:
Step6:修改broker.conf中的配置,主要設置nameserver的地址,broker的名稱等相關屬性。
vi broker.conf
# 使用如下配置文件brokerClusterName = DefaultClusterbrokerName = broker-abrokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTERflushDiskType = ASYNC_FLUSHstorePathRootDir=/home/dingwpmz/tmp/rocketmq/store
storePathCommitLog=/home/dingwpmz/tmp/rocketmq/store/commitlog
namesrvAddr=127.0.0.1:9876
brokerIP1=192.168.3.10
brokerIP2=192.168.3.10
autoCreateTopicEnable=true
Step7:broker/src/main/java/org/apache/rocketmq/broker/BrokerStartup設置環境變量ROCKETMQ_HOME,操作步驟如下圖所示:
Step8:以Debug模式運行BrokerStartup,其運行結果如下圖所示:
看到這樣的提示就表示大功告成。
接下來簡單來做一個驗證。
首先先在AbstractSendMessageProcessor類的parseRequestHeader方法中打上一個斷點。
然后運行example中org/apache/rocketmq/example/quickstart/Producer,看是否能進入到斷點中,運行結果如下圖所示,已進入到Debug模式。
3、小結
本篇作為RocketMQ實戰系列的第一篇文章,其目的就是構建一個研究RocketMQ的學習環境,故從兩個方面進行展開:
1、在Linux環境安裝RocketMQ、RocketMQ-Console。
2、在IDEA中運行RocketMQ,構建一個可以調試RocketMQ的環境。
溫馨提示:搭建一個可調試的環境,但絕不是學習RocketMQ源碼,就從Debug一步異步跟蹤,這樣會陷入其中而不可自拔,DEBUG只是一種輔助,應該用在無法理解某一端代碼時,使用DEBUG,借助運行時的一些數據,使之更容易理解。