RocketMQ爬坑記(一):安裝使用
1. RocketMQ簡介
RocketMQ作為一款純java、分散式、佇列模型的開源訊息中介軟體(阿里的說法是不遵循任何規範的,所以不能完全用JMS的那一套東西來看它),經歷了淘寶雙十一的洗禮,在功能和效能上據說是遠超ActiveMQ。
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 目錄的結構如下:
主要關注的是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.sh
和 runbroker.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下安裝
安裝下載構建和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:埠(配置的埠),即可。如圖: