一、RocketMQ產(chǎn)品特點
1、RocketMQ介紹
? RocketMQ是阿里巴巴開源的一個消息中間件,在阿里內(nèi)部歷經(jīng)了雙十一等很多高并發(fā)場景的考驗,能夠處理億萬級別的消息。2016年開源后捐贈給Apache,現(xiàn)在是Apache的一個頂級項目。
? 早期阿里使用ActiveMQ,但是,當(dāng)消息開始逐漸增多后,ActiveMQ的IO性能很快達到了瓶頸。于是,阿里開始關(guān)注Kafka。但是Kafka是針對日志收集場景設(shè)計的,他的高級功能并不是很貼合阿里的業(yè)務(wù)場景。尤其當(dāng)他的Topic過多時,由于Partition文件也會過多,這就會加大文件索引的耗時,會嚴重影響IO性能。于是阿里才決定自研中間件,最早叫做MetaQ,后來改名成為RocketMQ。最早他所希望解決的最大問題就是多Topic下的IO性能壓力。但是產(chǎn)品在阿里內(nèi)部的不斷改進,RocketMQ開始體現(xiàn)出一些不一樣的優(yōu)勢。
2、RocketMQ特點
當(dāng)今互聯(lián)網(wǎng)MQ產(chǎn)品眾多,其中,影響力和使用范圍最大的當(dāng)數(shù)Apache Kafka、RabbitMQ、Apache RocketMQ以及Apache Plusar。這幾大產(chǎn)品雖然都是典型的MQ產(chǎn)品,但是由于設(shè)計和實現(xiàn)上的一些差異,造成他們適合于不同的細分場景。
二、RocketMQ快速實戰(zhàn)
1、快速搭建RocketMQ服務(wù)
? RocketMQ的官網(wǎng)地址: http://rocketmq.apache.org 。在下載頁面可以獲取RocketMQ的源碼包以及運行包。下載頁面地址: https://rocketmq.apache.org/download
? 運行只需要下載Binary運行版本就可以了。 當(dāng)然,源碼包也建議下載下來,后續(xù)會進行解讀。運行包下載下來后,就可以直接解壓,上傳到服務(wù)器上。我們這里會上傳到/app/rocketmq目錄。解壓后幾個重要的目錄如下:
接下來,RocketMQ建議的運行環(huán)境需要至少12G的內(nèi)存,這是生產(chǎn)環(huán)境比較理想的資源配置。但是,學(xué)習(xí)階段,如果你的服務(wù)器沒有這么大的內(nèi)存空間,那么就需要做一下調(diào)整。進入bin目錄,對其中的runserver.sh和runbroker.sh兩個腳本進行一下修改。
? 使用vi runserver.sh指令,編輯這個腳本,找到下面的一行配置,調(diào)整Java進程的內(nèi)存大小。
? 接下來,同樣調(diào)整runbroker.sh中的內(nèi)存大小。
? RocketMQ的后端服務(wù)分為nameserver和broker兩個服務(wù)
- 第一步:啟動nameserver服務(wù)。
cd /app/rocketmq/rocketmq-all-4.9.5-bin-release
nohup bin/mqnamesrv &
? 接下來,可以通過jsp指令進行驗證。使用jps指令后,可以看到有一個NamesrvStartup的進程運行,也表示nameserver服務(wù)啟動完成。
- 第二步:啟動broker服務(wù)。
? 啟動broker服務(wù)之前,要做一個小小的配置。進入RocketMQ安裝目錄下的conf目錄,修改broker.conf文件,在文件最后面加入一個配置:
#自動創(chuàng)建主題
autoCreateTopicEnable=true
然后也可以用之前的方式啟動broker服務(wù)。啟動broker服務(wù)的指令是mqbroker
cd /app/rocketmq/rocketmq-all-4.9.5-bin-release
nohup bin/mqbroker &
注:1、在實際服務(wù)部署時,通常會將RocketMQ的部署地址添加到環(huán)境變量當(dāng)中。例如使用vi ~/.bash_profile指令,添加以下內(nèi)容。
export ROCKETMQ_HOME=/app/rocketmq/rocketmq-all-4.9.5-bin-releasePATH=$ROCKETMQ_HOME/bin:$PATHexport PATH
這樣就不必每次進入RocketMQ的安裝目錄了。直接可以使用mqnamesrv 和mqbroker指令。
2、停止RocketMQ服務(wù)可以通過mqshutdown指令進行
mqshutdown namesrv # 關(guān)閉nameserver服務(wù)
mqshutdown broker # 關(guān)閉broker服務(wù)
2、快速實現(xiàn)消息收發(fā)
? RocketMQ后端服務(wù)啟動完成后,就可以啟動客戶端的消息生產(chǎn)者和消息消費者進行消息轉(zhuǎn)發(fā)了。接下來,我們會先通過RocketMQ提供的命令行工具快速體驗一下RocketMQ消息收發(fā)的功能。然后,再動手搭建一個Maven項目,在項目中使用RocketMQ進行消息收發(fā)。
1、命令行快速實現(xiàn)消息收發(fā)
第一步:需要配置一個環(huán)境變量NAMESRV_ADDR,只想我們之前啟動的nameserver服務(wù)。
通過vi ~/.bash_profile添加以下配置。然后使用source ~/.bash_profile讓配置生效。
export NAMESRV_ADDR='localhost:9876'
第二步通過指令啟動RocketMQ的消息生產(chǎn)者發(fā)送消息。
tools.sh org.apache.rocketmq.example.quickstart.Producer
這個指令會默認往RocketMQ中發(fā)送1000條消息。在命令行窗口可以看到發(fā)送消息的日志:
第三步:可以啟動消息消費者接收之前發(fā)送的消息
tools.sh org.apache.rocketmq.example.quickstart.Consumer
? 每一條這樣的日志信息就表示消費者接收到了一條消息。
? 這個Consumer消費者的指令并不會主動結(jié)束,他會繼續(xù)掛起,等待消費新的消息。我們可以使用CTRL+C停止該進程。
3、搭建RocketMQ可視化管理服務(wù)
? 在之前的簡單實驗中,RocketMQ都是以后臺服務(wù)的方式在運行,我們并不很清楚RocketMQ是如何運行的。RocketMQ的社區(qū)就提供了一個圖形化的管理控制臺Dashboard,可以用可視化的方式直接觀測并管理RocketMQ的運行過程。
備注:直接放了打包好的jar包:
鏈接:https://pan.baidu.com/s/15_w9Q0t7dFVGHiTLJcHuWg
提取碼:bzg2
? Dashboard服務(wù)并不在RocketMQ的運行包中,需要到RocketMQ的官網(wǎng)下載頁面單獨下載。
? 這里只提供了源碼,并沒有提供直接運行的jar包。將源碼下載下來后,需要解壓并進入對應(yīng)的目錄,使用maven進行編譯。(需要提前安裝maven客戶端)
mvn clean package -Dmaven.test.skip=true
編譯完成后,在源碼的target目錄下會生成可運行的jar包rocketmq-dashboard-1.0.1-SNAPSHOT.jar。接下來可以將這個jar包上傳到服務(wù)器上。我們上傳到/app/rocketmq/rocketmq-dashboard目錄下
接下來我們需要在jar包所在的目錄下創(chuàng)建一個application.yml配置文件,在配置文件中做如下配置:
rocketmq:
config:
namesrvAddrs:
- 192.168.232.128:9876
主要是要指定nameserver的地址。
接下來就可以通過java指令執(zhí)行這個jar包,啟動管理控制臺服務(wù)。
java -jar rocketmq-dashboard-1.0.1-SNAPSHOT.jar
4、升級分布式集群
? 之前我們用一臺Linux服務(wù)器,快速搭建起了一整套RocketMQ的服務(wù)。但是很明顯,這樣搭建的服務(wù)是無法放到生產(chǎn)環(huán)境上去用的。一旦nameserver服務(wù)或者broker服務(wù)出現(xiàn)了問題,整個RocketMQ就無法正常工作。而且更嚴重的是,如果服務(wù)器出現(xiàn)了問題,比如磁盤壞了,那么存儲在磁盤上的數(shù)據(jù)就會丟失。這時RocketMQ暫存到磁盤上的消息也會跟著丟失,這個問題就非常嚴重了。因此,我們需要搭建一個分布式的RocketMQ服務(wù)集群,來防止單點故障問題。
? RocketMQ的分布式集群基于主從架構(gòu)搭建。在多個服務(wù)器組成的集群中,指定一部分節(jié)點作為Master節(jié)點,負責(zé)響應(yīng)客戶端的請求。指令另一部分節(jié)點作為Slave節(jié)點,負責(zé)備份Master節(jié)點上的數(shù)據(jù),這樣,當(dāng)Master節(jié)點出現(xiàn)故障時,在Slave節(jié)點上可以保留有數(shù)據(jù)備份,至少保證數(shù)據(jù)不會丟失。
整個集群方案如下圖所示:
? 接下來我們準備三臺相同的Linux服務(wù)器,搭建一下RocketMQ的分布式集群。為了更清晰的描述這三臺服務(wù)器上的操作,我們給每個服務(wù)器指定一個機器名。
? 為了便于觀察,我們這次搭建一個2主2從的RocketMQ集群,并將主節(jié)點和節(jié)點都分別部署在不同的服務(wù)器上。預(yù)備的集群規(guī)劃情況如下:
主機 nameServer服務(wù)部署 broker服務(wù)部署
master nameServer
node1 nameServer broker-a,broker-b-s
node2 nameServer broker-a-s,broker-b
解釋:即master主機只部署nameServer 注冊中心,node1部署主節(jié)點a和從節(jié)點b ,node2部署從節(jié)點a和主節(jié)點b
第一步:部署nameServer服務(wù)。
? nameServer服務(wù)不需要做特別的配置,按照之前的步驟,在三臺服務(wù)器上都分別部署nameServer服務(wù)即可。
第二步:對Broker服務(wù)進行集群配置。
? 這里需要修改RocketMQ的配置文件,對broker服務(wù)做一些集群相關(guān)的參數(shù)部署。這些配置文件并不需要我們手動進行創(chuàng)建,在RocketMQ運行包的conf目錄下,提供了多種集群的部署配置文件模板。
- 2m-noslave: 2主無從的集群參考配置。這種集群存在單點故障。
- 2m-2s-async和2m-2s-sync: 2主2從的集群參考配置。其中async和sync表示主節(jié)點與從節(jié)點之間是同步同步還是異步同步
- dledger: 具備主從切換功能的高可用集群。集群中的節(jié)點會基于Raft協(xié)議隨機選舉出一個Leader,其作用類似于Master節(jié)點。其他的節(jié)點都是follower,其作用類似于Slave節(jié)點。
我們這次采用2m-2s-async的方式搭建集群,需要在node1和node2上修改這個文件夾下的配置文件。
1> 配置第一組broker-a服務(wù)
在worker2機器上配置broker-a的MASTER服務(wù),需要修改conf/2m-2s-async/broker-a.properties。示例配置如下:
#所屬集群名字,名字一樣的節(jié)點就在同一個集群內(nèi)
brokerClusterName=rocketmq-cluster
#broker名字,名字一樣的節(jié)點就是一組主從節(jié)點。
brokerName=broker-a
#brokerid,0就表示是Master,>0的都是表示 Slave
brokerId=0
#nameServer地址,分號分割
namesrvAddr=worker1:9876;worker2:9876;worker3:9876
#是否允許 Broker 自動創(chuàng)建Topic,建議線下開啟,線上關(guān)閉
autoCreateTopicEnable=true
deleteWhen=04
fileReservedTime=120
#存儲路徑
storePathRootDir=/app/rocketmq/store
storePathCommitLog=/app/rocketmq/store/commitlog
storePathConsumeQueue=/app/rocketmq/store/consumequeue
storePathIndex=/app/rocketmq/store/index
storeCheckpoint=/app/rocketmq/store/checkpoint
abortFile=/app/rocketmq/store/abort
#Broker 的角色
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
#Broker 對外服務(wù)的監(jiān)聽端口
listenPort=10911
這里對幾個需要重點關(guān)注的屬性,做下簡單介紹:
- brokerClusterName:
集群名。RocketMQ會將同一個局域網(wǎng)下所有brokerClusterName相同的服務(wù)自動組成一個集群,這個集群可以作為一個整體對外提供服務(wù) - brokerName:
Broker服務(wù)名。同一個RocketMQ集群當(dāng)中,brokerName相同的多個服務(wù)會有一套相同的數(shù)據(jù)副本。同一個RocketMQ集群中,是可以將消息分散存儲到多個不同的brokerName服務(wù)上的。 - brokerId:
RocketMQ中對每個服務(wù)的唯一標識。RocketMQ對brokerId定義了一套簡單的規(guī)則,master節(jié)點需要固定配置為0,負責(zé)響應(yīng)客戶端的請求。slave節(jié)點配置成其他任意數(shù)字,負責(zé)備份master上的消息。 - brokerRole:
服務(wù)的角色。這個屬性有三個可選項:ASYNC_MASTER,SYNC_MASTER和SLAVE。其中,ASYNC_MASTER和SYNC_MASTER表示當(dāng)前節(jié)點是master節(jié)點,目前暫時不用關(guān)心他們的區(qū)別。SLAVE則表示從節(jié)點。 - namesrvAddr:
nameserver服務(wù)的地址。nameserver服務(wù)默認占用9876端口。多個nameserver地址用;隔開。
? 接下來在worekr3上配置broker-a的SLAVE服務(wù)。需要修改conf/2m-2s-async/broker-a-s.properties。示例配置如下:
#所屬集群名字,名字一樣的節(jié)點就在同一個集群內(nèi)
brokerClusterName=rocketmq-cluster
#broker名字,名字一樣的節(jié)點就是一組主從節(jié)點。
brokerName=broker-a
#brokerid,0就表示是Master,>0的都是表示 Slave
brokerId=1
#nameServer地址,分號分割
namesrvAddr=worker1:9876;worker2:9876;worker3:9876
#是否允許 Broker 自動創(chuàng)建Topic,建議線下開啟,線上關(guān)閉
autoCreateTopicEnable=true
deleteWhen=04
fileReservedTime=120
#存儲路徑
storePathRootDir=/app/rocketmq/storeSlave
storePathCommitLog=/app/rocketmq/storeSlave/commitlog
storePathConsumeQueue=/app/rocketmq/storeSlave/consumequeue
storePathIndex=/app/rocketmq/storeSlave/index
storeCheckpoint=/app/rocketmq/storeSlave/checkpoint
abortFile=/app/rocketmq/storeSlave/abort
#Broker 的角色
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
#Broker 對外服務(wù)的監(jiān)聽端口
listenPort=11011
2> 配置第二組borker-b服務(wù)
? 與第一組broker-a服務(wù)的配置方式類似,在worker3上配置broker-b的MASTER服務(wù)。需要修改conf/2m-2s-async/broker-b.properties文件
#所屬集群名字,名字一樣的節(jié)點就在同一個集群內(nèi)
brokerClusterName=rocketmq-cluster
#broker名字,名字一樣的節(jié)點就是一組主從節(jié)點。
brokerName=broker-b
#brokerid,0就表示是Master,>0的都是表示 Slave
brokerId=0
#nameServer地址,分號分割
namesrvAddr=worker1:9876;worker2:9876;worker3:9876
#是否允許 Broker 自動創(chuàng)建Topic,建議線下開啟,線上關(guān)閉
autoCreateTopicEnable=true
deleteWhen=04
fileReservedTime=120
#存儲路徑
storePathRootDir=/app/rocketmq/store
storePathCommitLog=/app/rocketmq/store/commitlog
storePathConsumeQueue=/app/rocketmq/store/consumequeue
storePathIndex=/app/rocketmq/store/index
storeCheckpoint=/app/rocketmq/store/checkpoint
abortFile=/app/rocketmq/store/abort
#Broker 的角色
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
#Broker 對外服務(wù)的監(jiān)聽端口
listenPort=10911
? 在worker2上配置broker-b的SLAVE服務(wù)。需要修改conf/2m-2s-async/broker-b-s.properties文件,配置示例如下:
#所屬集群名字,名字一樣的節(jié)點就在同一個集群內(nèi)
brokerClusterName=rocketmq-cluster
#broker名字,名字一樣的節(jié)點就是一組主從節(jié)點。
brokerName=broker-b
#brokerid,0就表示是Master,>0的都是表示 Slave
brokerId=1
#nameServer地址,分號分割
namesrvAddr=worker1:9876;worker2:9876;worker3:9876
#是否允許 Broker 自動創(chuàng)建Topic,建議線下開啟,線上關(guān)閉
autoCreateTopicEnable=true
deleteWhen=04
fileReservedTime=120
#存儲路徑
storePathRootDir=/app/rocketmq/storeSlave
storePathCommitLog=/app/rocketmq/storeSlave/commitlog
storePathConsumeQueue=/app/rocketmq/storeSlave/consumequeue
storePathIndex=/app/rocketmq/storeSlave/index
storeCheckpoint=/app/rocketmq/storeSlave/checkpoint
abortFile=/app/rocketmq/storeSlave/abort
#Broker 的角色
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
#Broker 對外服務(wù)的監(jiān)聽端口
listenPort=11011
第三步:啟動Broker服務(wù)
? 集群配置完成后,需要啟動Broker服務(wù)。與之前啟動broker服務(wù)稍有不同,啟動時需要增加-c參數(shù),指向我們修改的配置文件。
? 在node1上啟動broker-a的master服務(wù)和broker-b的slave服務(wù):
cd /app/rocketmq/rocketmq-all-4.9.5-bin-release
nohup bin/mqbroker -c ./conf/2m-2s-async/broker-a.properties &
nohup bin/mqbroker -c ./conf/2m-2s-async/broker-b-s.properties &
? 在node2上啟動broker-b的master服務(wù)和broker-a的slave服務(wù):
cd /app/rocketmq/rocketmq-all-4.9.5-bin-release
nohup bin/mqbroker -c ./conf/2m-2s-async/broker-b.properties &
nohup bin/mqbroker -c ./conf/2m-2s-async/broker-a-s.properties &
第四步:檢查集群服務(wù)狀態(tài)
在RocketMQ的這種主從架構(gòu)的集群下,客戶端發(fā)送的消息會分散保存到broker-a和broker-b兩個服務(wù)上,然后每個服務(wù)都配有slave服務(wù),可以備份對應(yīng)master服務(wù)上的消息,這樣就可以防止單點故障造成的消息丟失問題。
5、升級高可用集群
? 主從架構(gòu)的RocketMQ集群,由于給每個broker服務(wù)配置了一個或多個slave備份服務(wù),可以保證當(dāng)broker服務(wù)出現(xiàn)問題時,broker上的消息不會丟失。但是,這種主從架構(gòu)的集群卻也有一個不足的地方,那就是不具備服務(wù)高可用。
? 這里所說的服務(wù)高可用,并不是并不是指整個RocketMQ集群就不能對外提供服務(wù)了,而是指集群中的消息就不完整了。實際上,當(dāng)RocketMQ集群中的broker宕機后,整個集群會自動進行broker狀態(tài)感知。后續(xù)客戶端的各種請求,依然可以轉(zhuǎn)發(fā)到其他正常的broker上。只不過,原本保存在當(dāng)前broker上的消息,就無法正常讀取了,需要等到當(dāng)前broker服務(wù)重啟后,才能重新被消息消費者讀取。
? 當(dāng)一個broker上的服務(wù)宕機后,我們可以從對應(yīng)的slave服務(wù)上找到broker上所有的消息。但是很可惜,主從架構(gòu)中各個服務(wù)的角色都是固定了的,slave服務(wù)雖然擁有全部的數(shù)據(jù),但是它沒辦法升級成為master服務(wù)去響應(yīng)客戶端的請求,依然只是傻傻等待master服務(wù)重啟后,繼續(xù)做它的數(shù)據(jù)備份工作。
? 這時,我們自然就希望這個slave服務(wù)可以升級成為master服務(wù),繼續(xù)響應(yīng)客戶端的各種請求,這樣整個集群的消息服務(wù)就不會有任何中斷。而RocketMQ提供的Dledger集群,就是具備角色自動轉(zhuǎn)換功能的高可用集群。
在Dledger集群中,就不再單獨指定各個broker的服務(wù),而是由這些broker服務(wù)自行進行選舉,產(chǎn)生一個Leader角色的服務(wù),響應(yīng)客戶端的各種請求。而其他的broker服務(wù),就作為Follower角色,負責(zé)對Leader上的數(shù)據(jù)進行備份。當(dāng)然,F(xiàn)ollower所要負責(zé)的事情,比主從架構(gòu)中的SLAVE角色會要復(fù)雜一點,因為這種節(jié)點選舉是在后端不斷進行的,他們需要隨時做好升級成Leader的準備。
? Dledger集群的選舉是通過Raft協(xié)議進行的,Raft協(xié)議是一種多數(shù)同意機制。也就是每次選舉需要有集群中超過半數(shù)的節(jié)點確認,才能形成整個集群的共同決定。同時,這也意味著在Dledger集群中,只要有超過半數(shù)的節(jié)點能夠正常工作,那么整個集群就能正常工作。因此,在部署Dledger集群時,通常都是部署奇數(shù)臺服務(wù),這樣可以讓集群的容錯性達到最大。
? 接下來,我們就用之前準備的3臺服務(wù)器,搭建一個3個節(jié)點的Dledger集群。在這個集群中,只需要有2臺Broker服務(wù)正常運行,這個集群就能正常工作。
第一步:部署nameserver
這一步和之前部署主從集群沒有區(qū)別,不需要做過多的配置,直接在三臺服務(wù)器上啟動nameserver服務(wù)即可。
? 實際上,如果你是從上一個主從架構(gòu)開始搭建起來的話,那么nameserver集群都不需要重新啟動,nameserver會自動感知到broker的變化。
第二步:對Broker服務(wù)進行集群配置。
? 對于Dledger集群的配置,RocketMQ依然貼心的給出了完整的示例,不需要強行記憶。
? 在conf/dledger目錄下,RocketMQ默認給出了三個配置文件,這三個配置文件可以在單機情況下直接部署成一個具有三個broker服務(wù)的Dledger集群,我們只需要按照這個配置進行修改即可。
? 接下來我們可以在三臺機器的conf/dledger目錄下,都創(chuàng)建一個broker.conf文件,對每個broker服務(wù)進行配置。
master的配置
brokerClusterName = RaftCluster
brokerName=RaftNode00
listenPort=30911
namesrvAddr=master:9876;node1:9876;node2:9876
storePathRootDir=/app/rocketmq/storeDledger/
storePathCommitLog=/app/rocketmq/storeDledger/commitlog
storePathConsumeQueue=/app/rocketmq/storeDledger/consumequeue
storePathIndex=/app/rocketmq/storeDledger/index
storeCheckpoint=/app/rocketmq/storeDledger/checkpoint
abortFile=/app/rocketmq/storeDledger/abort
enableDLegerCommitLog=true
dLegerGroup=RaftNode00
dLegerPeers=n0-master:40911;n1-node1:40911;n2-node2:40911
## must be unique
dLegerSelfId=n0
sendMessageThreadPoolNums=16
node1的配置
brokerClusterName = RaftCluster
brokerName=RaftNode00
listenPort=30911
namesrvAddr=master:9876;node1:9876;node2:9876
storePathRootDir=/app/rocketmq/storeDledger/
storePathCommitLog=/app/rocketmq/storeDledger/commitlog
storePathConsumeQueue=/app/rocketmq/storeDledger/consumequeue
storePathIndex=/app/rocketmq/storeDledger/index
storeCheckpoint=/app/rocketmq/storeDledger/checkpoint
abortFile=/app/rocketmq/storeDledger/abort
enableDLegerCommitLog=true
dLegerGroup=RaftNode00
dLegerPeers=n0-master:40911;n1-node1:40911;n2-node2:40911
## must be unique
dLegerSelfId=n1
sendMessageThreadPoolNums=16
node2的配置文章來源:http://www.zghlxwxcb.cn/news/detail-605617.html
brokerClusterName = RaftCluster
brokerName=RaftNode00
listenPort=30911
namesrvAddr=master:9876;node1:9876;node2:9876
storePathRootDir=/app/rocketmq/storeDledger/
storePathCommitLog=/app/rocketmq/storeDledger/commitlog
storePathConsumeQueue=/app/rocketmq/storeDledger/consumequeue
storePathIndex=/app/rocketmq/storeDledger/index
storeCheckpoint=/app/rocketmq/storeDledger/checkpoint
abortFile=/app/rocketmq/storeDledger/abort
enableDLegerCommitLog=true
dLegerGroup=RaftNode00
dLegerPeers=n0-master:40911;n1-node1:40911;n2-node2:40911
## must be unique
dLegerSelfId=n2
sendMessageThreadPoolNums=16
第四步:檢查集群服務(wù)狀態(tài)文章來源地址http://www.zghlxwxcb.cn/news/detail-605617.html
到了這里,關(guān)于RocketMQ第一課-快速實戰(zhàn)以及集群架構(gòu)搭建的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!