RocketMQ 系列(二) 環境搭建

2023-08-31 06:01:05

RocketMQ 系列(二) 環境搭建

上一個章節對於 RocketMQ 作了一些概念上的介紹,如果你對於 RocketMQ 沒有概念,不妨先看RocketMQ系列(一) 基本介紹

這個章節主要介紹 RocketMQ 的環境搭建與安裝。

1、準備工作

1.1、環境要求

  • Linux64 位系統
  • JDK1.8 64位元及以上

1.2、安裝 JDK1.8

RocketMQ 我在這裡用的是 Linux 伺服器安裝的,安裝之前需要先裝好 JDK 。

查詢 JDK 可用版本:

yum -y list java*

yum 提供了查詢、安裝、刪除某一個、一組甚至全部軟體包的命令

選擇安裝 JDK1.8:

yum install -y java-1.8.0-openjdk.x86_64   

檢驗安裝:

java -version

2、安裝 RocketMQ

2.1、下載並解壓

下載地址:官網下載地址

首先在 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等

下載解壓完成,那麼剩下的就是怎麼啟動的問題了。

2.2、啟動 NameServer

RocketMQ 預設的虛擬機器器記憶體較大,啟動 Broker 或者 NameServer 可能會因為記憶體不足而導致失敗,所以需要編輯這兩個地方的組態檔,修改 JVM 記憶體大小

編輯 runserver.sh

vim bin/runserver.sh

按鍵盤 i 切換輸入模式, 修改地方如下圖:

參考 JVM 引數設定
 -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m

ESC退回普通模式,輸入:wq儲存檔案並退出 vim 編輯。

:wq
啟動 NameServer
nohup sh bin/mqnamesrv &

nohup 英文全稱 no hang up(不掛起),用於在系統後臺不結束通話地執行命令,退出終端不會影響程式的執行。

想知道啟動成功與否,那就要看對應的啟動紀錄檔,檢視 NameServer紀錄檔:

tail -f ~/logs/rocketmqlogs/namesrv.log

如果能看到以下紀錄檔,表示啟動成功:

2.3、啟動 Broker

同理修改 BrokerNameServer類似,編輯 JVM 引數並啟動。

編輯 runbroker.sh

vim bin/runbroker.sh

要修改的就是下圖位置:

參考 JVM 引數設定
 -server -Xms256m -Xmx256m -Xmn128m

儲存並退出 vim 編輯。

修改 Broker 組態檔

Broker需要向NameServer註冊,所以還需要指定NameServer的地址。

因為NameServerBroker 在同一臺機器,所以是 localhost,NameServer 埠預設的是 9876。

編輯broker.conf

vim conf/broker.conf

在檔案末尾新增以下設定:

namesrvAddr = localhost:9876
brokerIP1 = 192.168.0.17

brokerIP1記得修改成自己的伺服器 IP 地址。

啟動 Broker

啟動時指定讀取上面的組態檔:

nohup sh bin/mqbroker -c conf/broker.conf &
  • -c:指定組態檔路徑
  • -n:NameServer 的地址

檢視紀錄檔:

tail -f ~/logs/rocketmqlogs/broker.log

看到以下資訊,說明已經啟動成功了。

2.4、測試

啟動完NameServerBroker,可以進行簡單的測試。

首先設定環境變數

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

接收到的訊息截圖如下:

2.5、關閉 RocketMQ

關閉NameServerBroker的命令如下:

# 1.關閉NameServer
sh bin/mqshutdown namesrv
# 2.關閉Broker
sh bin/mqshutdown broker

2.6、開放埠

啟動完 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
伺服器安全組開放埠

除了防火牆開放埠之外,伺服器安全組也要設定上述四個埠對外開放,我用的是華為的雲伺服器,在安全組裡新增入方向規則,規則填寫上述四個埠

3、搭建視覺化控制檯

前面 NameServer 和 Broker 搭建完成之後,就可以用來收發訊息了,但是為了更加直觀,可以搭建對應的服務控制檯。

3.1、下載

下載地址:https://github.com/apache/rocketmq-dashboard/releases/tag/rocketmq-dashboard-1.0.0

Github 介面如下,點選下載壓縮包或直接 clone :

3.2、修改組態檔

IDEA 開啟剛解壓的資源,修改組態檔:

修改 localhost 為自己的 Linux 伺服器公網 IP 地址。

3.3、執行 jar 包

完善 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 相關外掛:

3.4、Chrome topic 查詢踩坑

原本我是非常信任 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 使用下個章節進行演示。

參考資料: