上一個章節對於 RocketMQ 作了一些概念上的介紹,如果你對於 RocketMQ 沒有概念,不妨先看RocketMQ系列(一) 基本介紹。
這個章節主要介紹 RocketMQ 的環境搭建與安裝。
RocketMQ 我在這裡用的是 Linux 伺服器安裝的,安裝之前需要先裝好 JDK 。
查詢 JDK 可用版本:
yum -y list java*
yum 提供了查詢、安裝、刪除某一個、一組甚至全部軟體包的命令
選擇安裝 JDK1.8:
yum install -y java-1.8.0-openjdk.x86_64
檢驗安裝:
java -version
下載地址:官網下載地址
首先在 Linux 伺服器建立資料夾用於存放即將下載的 RocketMQ
mkdir usr/rocketmq
cd usr/rocketmq
資料夾建立好之後,從官網上覆制想要下載的 RocketMQ 版本連結,我下載的版本是4.9.6,使用遠端下載命令:
wget https://archive.apache.org/dist/rocketmq/4.9.6/rocketmq-all-4.9.6-bin-release.zip
下載完後解壓:
unzip rocketmq-all-4.9.6-bin-release.zip
然後進入 rocketmq-all-4.9.6-bin-release 資料夾:
cd rocketmq-all-4.9.6-bin-release
資料夾包含了以下檔案:
bin
:啟動指令碼,包括 shell 指令碼和 CMD 指令碼conf
:範例組態檔 ,包括 broker 組態檔、logback 組態檔等lib
:依賴 jar 包,包括Netty、commons-lang、FastJSON等下載解壓完成,那麼剩下的就是怎麼啟動的問題了。
RocketMQ
預設的虛擬機器器記憶體較大,啟動 Broker
或者 NameServer
可能會因為記憶體不足而導致失敗,所以需要編輯這兩個地方的組態檔,修改 JVM 記憶體大小
編輯 runserver.sh
vim bin/runserver.sh
按鍵盤 i
切換輸入模式, 修改地方如下圖:
-server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m
按 ESC
退回普通模式,輸入:wq
儲存檔案並退出 vim 編輯。
:wq
nohup sh bin/mqnamesrv &
nohup 英文全稱 no hang up(不掛起),用於在系統後臺不結束通話地執行命令,退出終端不會影響程式的執行。
想知道啟動成功與否,那就要看對應的啟動紀錄檔,檢視 NameServer
紀錄檔:
tail -f ~/logs/rocketmqlogs/namesrv.log
如果能看到以下紀錄檔,表示啟動成功:
同理修改 Broker
與NameServer
類似,編輯 JVM 引數並啟動。
編輯 runbroker.sh
vim bin/runbroker.sh
要修改的就是下圖位置:
-server -Xms256m -Xmx256m -Xmn128m
儲存並退出 vim 編輯。
Broker
需要向NameServer
註冊,所以還需要指定NameServer
的地址。
因為NameServer
跟Broker
在同一臺機器,所以是 localhost,NameServer 埠預設的是 9876。
編輯broker.conf
vim conf/broker.conf
在檔案末尾新增以下設定:
namesrvAddr = localhost:9876
brokerIP1 = 192.168.0.17
brokerIP1
記得修改成自己的伺服器 IP 地址。
啟動時指定讀取上面的組態檔:
nohup sh bin/mqbroker -c conf/broker.conf &
-c
:指定組態檔路徑-n
:NameServer 的地址檢視紀錄檔:
tail -f ~/logs/rocketmqlogs/broker.log
看到以下資訊,說明已經啟動成功了。
啟動完NameServer
及Broker
,可以進行簡單的測試。
首先設定環境變數
export NAMESRV_ADDR=localhost:9876
傳送訊息
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
然後就是接收訊息
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
接收到的訊息截圖如下:
關閉NameServer
及Broker
的命令如下:
# 1.關閉NameServer
sh bin/mqshutdown namesrv
# 2.關閉Broker
sh bin/mqshutdown broker
啟動完 RocketMQ後,要開放的埠一般有4個:9876,10911,10912,10909
9876:Nameserver 的埠
10911: listenPort, 是 Broker的監聽埠,是 RemotingServer 服務元件使用,作為對 Producer 和 Consumer 提供服務的埠號,預設為10911,可以通過 broker.conf 組態檔修改。
#Broker 對外服務的監聽埠
listenPort=10911
10909:fastListenPort, 是 fastRemotingServer 服務元件使用,預設為 listenPort - 2,可以通過 broker.conf 組態檔修改。
#主要用於slave同步master
fastListenPort=10909
10912:haListenPort, 是HAService服務元件使用,用於Broker的主從同步,預設為listenPort + 1,可以通過組態檔修改。
#haService中使用
haListenPort=10912
檢視防火牆狀態:
systemctl status firewalld
開放上述四個埠:
firewall-cmd --zone=public --add-port=9876/tcp --permanent
firewall-cmd --zone=public --add-port=10911/tcp --permanent
firewall-cmd --zone=public --add-port=10909/tcp --permanent
firewall-cmd --zone=public --add-port=10912/tcp --permanent
重啟防火牆:
firewall-cmd --reload
檢視防火牆所有開放的埠
firewall-cmd --list-port
除了防火牆開放埠之外,伺服器安全組也要設定上述四個埠對外開放,我用的是華為的雲伺服器,在安全組裡新增入方向規則,規則填寫上述四個埠。
前面 NameServer 和 Broker 搭建完成之後,就可以用來收發訊息了,但是為了更加直觀,可以搭建對應的服務控制檯。
下載地址:https://github.com/apache/rocketmq-dashboard/releases/tag/rocketmq-dashboard-1.0.0
Github 介面如下,點選下載壓縮包或直接 clone :
IDEA 開啟剛解壓的資源,修改組態檔:
修改 localhost 為自己的 Linux 伺服器公網 IP 地址。
完善 pom.xml 下 node 資源下載:
<configuration>
<nodeDownloadRoot>https://cdn.npmmirror.com/binaries/node/</nodeDownloadRoot>
<nodeVersion>v16.2.0</nodeVersion>
<yarnVersion>v1.22.10</yarnVersion>
</configuration>
刪掉 frontend-maven-plugin 相關外掛:
原本我是非常信任 chrome 瀏覽器的,但是在使用控制檯的 topic 查詢時出現了元件的相容性問題,導致無法觸發查詢,所以這次我要給它個差評。
chrome 踩坑版本如下:
在訊息的查詢頁面,選擇 TOPIC 選項,下拉選擇主題及選擇時間,然後點選搜尋按鈕,F12 開啟偵錯視窗,可以發現沒有辦法進行介面呼叫。
這個坑非常的隱蔽,因為 MESSAGE KEY 和 MESSAGE ID 兩種查詢的搜尋元件是能正常使用的,所以沒有第一時間想到是元件相容性問題。
我試過採用舊版本的 dashboard(2017版本),也試過下調 RocketMQ 版本(4.9.6 -> 4.7.1),又翻遍了 github 的 issue, 都沒能解決這個查詢問題,最後實在沒辦法 F12 開啟偵錯視窗想要排查具體呼叫的介面,萬萬沒想到根本就沒有進行呼叫,頓時一陣心累。
然後我用 Edge 瀏覽器執行同樣的 topic 查詢,搜尋元件能正常呼叫介面:
所以這裡不建議用 Chrome 存取控制檯了。
到這裡基本的 RocketMQ 環境搭建完畢。關於如何搭配 SpringBoot 使用下個章節進行演示。
參考資料: