1. 程式人生 > >RocketMQ爬坑記(一):安裝使用

RocketMQ爬坑記(一):安裝使用

1. RocketMQ簡介

RocketMQ作為一款純java、分散式、佇列模型的開源訊息中介軟體(阿里的說法是不遵循任何規範的,所以不能完全用JMS的那一套東西來看它),經歷了淘寶雙十一的洗禮,在功能和效能上據說是遠超ActiveMQ。

RocketMQ簡介,其中對rocketMQ的歷史及特性做了簡要的介紹。

這裡再分享下,阿里中間技術團隊官方部落格,其中主要描述的都是概念性的東西,可以幫你更加深入瞭解RocketMQ的架構以及使用原理。

本文更多的偏向應用方面,描述的是筆者在使用RocketMQ遇到的一些問題。

接下來,開始聊聊RocketMQ的安裝過程;參考

RocketMQ官方文件

2. RocketMQ安裝

2.1 Linux下安裝

2.1.1 安裝條件

  • 64位JDK 1.8+;
  • Maven 3.2.x;
  • Git(這裡不必須,主要運來獲取RocketMQ的壓縮包)

2.1.2 釋出下載和構建

單擊此處下載4.3.0原始碼版本。您也可以從這裡下載二進位制版本。

現在執行以下命令來解壓縮4.3.0原始碼版本並構建二進位制工件。

  > unzip rocketmq-all-4.3.0-source-release.zip
  > cd rocketmq-all-4.3.0/
  >
mvn -Prelease-all -DskipTests clean install -U > cd distribution/target/apache-rocketmq

解壓完成之後:apache-rocketmq 目錄的結構如下:

rocketmq目錄結構

主要關注的是bin目錄下存放的是啟動、停止等一些指令碼,conf目錄存放配置檔案等資訊;

對於nameserver和broker日誌位置都可以手動配置,具體配置檔案就是conf下的logback_broker.xml和logback_namesrv.xml;

這裡在conf目錄下新增 broker-a.properties檔案

檔案內容如下:

#Broker所屬哪個叢集,預設【DefaultCluster】
terName=DefaultCluster
#本機主機名,需要唯一
brokerName=broker-a
#BrokerId,必須是大等於0的整數,0表示Master,>0表示Slave,一個Master可以掛多個Slave,Master與Slave通過BrokerName來配對,預設【0】
brokerId=0
#刪除檔案時間點,預設凌晨4點
deleteWhen=04
#檔案保留時間,預設48小時
fileReservedTime=48
#Broker的角色 - ASYNC_MASTER 非同步複製Master - SYNC_MASTER 同步雙寫Master - SLAVE
brokerRole=ASYNC_MASTER
#刷盤方式 - ASYNC_FLUSH 非同步刷盤 - SYNC_FLUSH 同步刷盤
flushDiskType=ASYNC_FLUSH
#Name Server地址 如果是叢集方式以;隔開
namesrvAddr=hadoop03:9876
storePathRootDir=/apps/rocketmq/alibaba-rocketmq/store
storePathCommitLog=/apps/rocketmq/alibaba-rocketmq/store/commitlog
#是否允許Broker自動建立Topic,建議線下開啟,線上關閉,預設【true】
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
#Broker對外服務的監聽埠,預設【10911】
#listenPort=10911

這裡的部署主要採用單機部署;更多的叢集部署方式見 雙寫模式部署RocketMQ.

2.1.3 啟動namesrv和broker

接下來啟動namesrv和broker;

啟動namesrv:

  > nohup sh bin/mqnamesrv &
  > tail -f ~/logs/rocketmqlogs/namesrv.log
  The Name Server boot success...

當出現,The Name Server boot success... 時代表啟動namesrv成功;

啟動broker:

  > nohup sh mqbroker -c ../conf/broker-a.properties &
  > tail -f ~/logs/rocketmqlogs/broker.log 
  The broker[%s, 172.30.30.233:10911] boot success...

當出現,The broker[%s, 172.30.30.233:10911] boot success... 代表啟動broker成功.

此時可以用jps查詢程序:

執行狀態

2.1.4 關閉namesrv和broker

> sh bin/mqshutdown broker
The mqbroker(36695) is running...
Send shutdown request to mqbroker(36695) OK

> sh bin/mqshutdown namesrv
The mqnamesrv(36664) is running...
Send shutdown request to mqnamesrv(36664) OK

坑1:啟動了namesrv,但死活啟動不了broker.

這個時候用守護程序啟動broker,也沒有日誌,所以此時不要用守護程序啟動,直接 ./mqbroker 此時就能看到錯誤資訊,提示你記憶體大小不足;

在網上找了下原因,才發現坑爹的RocketMQ初始化要求可用記憶體必須4~8G左右,而我的機器沒有那麼大的記憶體。

解決方法:

修改bin 目錄下 runserver.shrunbroker.sh 兩個檔案,修改其中內容如下:

JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn125m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

主要是修改適合你機器的記憶體大小;

坑2:brokerIP1配置問題

強制指定本機IP,需要根據每臺機器進行修改。官方介紹可為空,系統預設自動識別;但多網絡卡時IP可能讀取錯誤;

broker自動尋的地址是172.17.0.1,而且深深的刻在了預設配置檔案裡,雖然我關掉了這個網路,配置檔案裡還是這個地址,然後我重新寫了個配置檔案,強制指定broker所在的機器ip為192.168.x.x,重啟服務,就大功告成了!

2.2 Windows下安裝

參照RocketMQ在Windows平臺下環境搭建

安裝下載構建和Linux下一致;得到構建後的apache-rocketmq.

進入bin目錄下,執行

start mqnamesrv.cmd (彈出的框不要關閉)

start mqbroker.cmd -n 127.0.0.1:9876 (彈出的框不要關閉)

至此就啟動完了;

2.3 安裝MQ監控平臺

2.3.1 下載

github地址,從github上下載原始碼;

進入到rocketmq-console/src/main/resources目錄下,修改application.properties檔案

server.contextPath=
server.port=8080
#spring.application.index=true
spring.application.name=rocketmq-console
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
logging.config=classpath:logback.xml
#if this value is empty,use env value rocketmq.config.namesrvAddr  NAMESRV_ADDR | now, you can set it in ops page.default localhost:9876
rocketmq.config.namesrvAddr=
#if you use rocketmq version < 3.5.8, rocketmq.config.isVIPChannel should be false.default true
rocketmq.config.isVIPChannel=
#rocketmq-console's data path:dashboard/monitor
rocketmq.config.dataPath=/tmp/rocketmq-console/data
#set it false if you don't want use dashboard.default true
rocketmq.config.enableDashBoardCollect=true

主要是配置rocketmq.config.namesrvAddr 地址 ,如果不配置,則預設是localhost:9876

2.3.2 編譯

進入到rocketmq-console(pom檔案所在目錄)下執行

mvn clean package -Dmaven.test.skip=true

注意:不要直接使用mvn package,會提示很多錯誤

執行完畢後在target目錄下會生成一個jar包,執行jar包

java -jar XXX.jar

在瀏覽器訪問:ip:埠(配置的埠),即可。如圖:

控制檯