RocketMQ快速入門
下載RocketMQ
下載地址
環境要求
-
Linux64位系統
-
JDK1.8(64位)
安裝RocketMQ
解壓
unzip rocketmq-all-4.4.0-bin-release.zip
啟動RocketMQ
- 啟動NameServer
# 1.啟動NameServer
nohup sh bin/mqnamesrv &
# 2.查看啟動日志
tail -f ~/logs/rocketmqlogs/namesrv.log
- 啟動Broker
# 1.啟動Broker
nohup sh bin/mqbroker -n localhost:9876 &
# 2.查看啟動日志
tail -f ~/logs/rocketmqlogs/broker.log
如果jps沒有看到NamesrvStartup和BrokerStartup,說明沒有啟動成功,很可能是內存不夠,需要修改內存
-
問題描述:
RocketMQ默認的虛擬機內存較大,啟動Broker如果因為內存不足失敗,需要編輯bin目錄下兩個配置文件,修改JVM內存大小
# 編輯runbroker.sh和runserver.sh修改默認JVM大小
vi bin/runbroker.sh
vi bin/runserver.sh
- 參考設置:
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
配置好內存后,關閉namesrv和broker,重新啟動
# 1.關閉NameServer
sh bin/mqshutdown namesrv
# 2.關閉Broker
sh bin/mqshutdown broker
# 3.啟動NameServer
nohup sh bin/mqnamesrv &
# 4.查看啟動日志
tail -f ~/logs/rocketmqlogs/namesrv.log
# 5.啟動Broker
nohup sh bin/mqbroker -n localhost:9876 &
# 6.查看啟動日志
tail -f ~/logs/rocketmqlogs/broker.log
然后jps查看
測試RocketMQ
發送消息
# 1.設置環境變量
export NAMESRV_ADDR=localhost:9876
# 2.使用安裝包的Demo發送消息
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
接收消息(另一個shell窗口)
# 1.設置環境變量
export NAMESRV_ADDR=localhost:9876
# 2.接收消息
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
一個窗口發,另一個窗口能接受到,表示運行正常
關閉RocketMQ
# 1.關閉NameServer
sh bin/mqshutdown namesrv
# 2.關閉Broker
sh bin/mqshutdown broker
RocketMQ集群搭建
各角色介紹
- Producer:消息的發送者;舉例:發信者
- Consumer:消息接收者;舉例:收信者
- Broker:暫存和傳輸消息;舉例:郵局
- NameServer:管理Broker;舉例:各個郵局的管理機構
- Topic:區分消息的種類;一個發送者可以發送消息給一個或者多個Topic;一個消息的接收者可以訂閱一個或者多個Topic消息
- Message Queue:相當于是Topic的分區;用于并行發送和接收消息
雙主雙從集群搭建
總體架構
消息高可用采用2m-2s(同步雙寫)方式
集群工作流程
- 啟動NameServer,NameServer起來后監聽端口,等待Broker、Producer、Consumer連上來,相當于一個路由控制中心。
- Broker啟動,跟所有的NameServer保持長連接,定時發送心跳包。心跳包中包含當前Broker信息(IP+端口等)以及存儲所有Topic信息。注冊成功后,NameServer集群中就有Topic跟Broker的映射關系。
- 收發消息前,先創建Topic,創建Topic時需要指定該Topic要存儲在哪些Broker上,也可以在發送消息時自動創建Topic。
- Producer發送消息,啟動時先跟NameServer集群中的其中一臺建立長連接,并從NameServer中獲取當前發送的Topic存在哪些Broker上,輪詢從隊列列表中選擇一個隊列,然后與隊列所在的Broker建立長連接從而向Broker發消息。
- Consumer跟Producer類似,跟其中一臺NameServer建立長連接,獲取當前訂閱Topic存在哪些Broker上,然后直接跟Broker建立連接通道,開始消費消息。
服務器環境
序號 | IP | 角色 | 架構模式 |
---|---|---|---|
1 | 192.168.150.100 | nameserver、brokerserver | Master1、Slave2 |
2 | 192.168.150.103 | nameserver、brokerserver | Master2、Slave1 |
Host添加信息(兩臺服務器)
vim /etc/hosts
配置如下:
# nameserver
192.168.150.100 rocketmq-nameserver1
192.168.150.103 rocketmq-nameserver2
# broker
192.168.150.100 rocketmq-master1
192.168.150.100 rocketmq-slave2
192.168.150.103 rocketmq-master2
192.168.150.103 rocketmq-slave1
配置完成后, 重啟網卡
systemctl restart network
防火墻配置(兩臺服務器)
宿主機需要遠程訪問虛擬機的rocketmq服務和web服務,需要開放相關的端口號,簡單粗暴的方式是直接關閉防火墻
# 關閉防火墻
systemctl stop firewalld.service
# 查看防火墻的狀態
firewall-cmd --state
# 禁止firewall開機啟動
systemctl disable firewalld.service
或者為了安全,只開放特定的端口號,RocketMQ默認使用3個端口:9876 、10911 、11011 。如果防火墻沒有關閉的話,那么防火墻就必須開放這些端口:
nameserver
默認使用 9876 端口master
默認使用 10911 端口slave
默認使用11011 端口
執行以下命令:
# 開放name server默認端口
firewall-cmd --remove-port=9876/tcp --permanent
# 開放master默認端口
firewall-cmd --remove-port=10911/tcp --permanent
# 開放slave默認端口 (當前集群模式可不開啟)
firewall-cmd --remove-port=11011/tcp --permanent
# 重啟防火墻
firewall-cmd --reload
環境變量配置(兩臺服務器)
vim /etc/profile
在profile文件的末尾加入如下命令
#set rocketmq
ROCKETMQ_HOME=/root/rocketmq/rocketmq-all-4.4.0-bin-release
PATH=$PATH:$ROCKETMQ_HOME/bin
export ROCKETMQ_HOME PATH
輸入:wq! 保存并退出, 并使得配置立刻生效:
source /etc/profile
創建消息存儲路徑(兩臺服務器)
mkdir /root/rocketmq/store
mkdir /root/rocketmq/store/commitlog
mkdir /root/rocketmq/store/consumequeue
mkdir /root/rocketmq/store/indexmkdir /root/rocketmq/store_slave
mkdir /root/rocketmq/store_slave/commitlog
mkdir /root/rocketmq/store_slave/consumequeue
mkdir /root/rocketmq/store_slave/index
broker配置文件
1)master1
服務器:192.168.150.100
vi /root/rocketmq/rocketmq-all-4.4.0-bin-release/conf/2m-2s-sync/broker-a.properties
修改配置如下:
#所屬集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此處不同的配置文件填寫的不一樣
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分號分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
#在發送消息時,自動創建服務器不存在的topic,默認創建的隊列數
defaultTopicQueueNums=4
#是否允許 Broker 自動創建Topic,建議線下開啟,線上關閉
autoCreateTopicEnable=true
#是否允許 Broker 自動創建訂閱組,建議線下開啟,線上關閉
autoCreateSubscriptionGroup=true
#Broker 對外服務的監聽端口
listenPort=10911
#刪除文件時間點,默認凌晨 4點
deleteWhen=04
#文件保留時間,默認 48 小時
fileReservedTime=120
#commitLog每個文件的大小默認1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每個文件默認存30W條,根據業務情況調整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#檢測物理文件磁盤空間
diskMaxUsedSpaceRatio=88
#存儲路徑
storePathRootDir=/root/rocketmq/store
#commitLog 存儲路徑
storePathCommitLog=/root/rocketmq/store/commitlog
#消費隊列存儲路徑存儲路徑
storePathConsumeQueue=/root/rocketmq/store/consumequeue
#消息索引存儲路徑
storePathIndex=/root/rocketmq/store/index
#checkpoint 文件存儲路徑
storeCheckpoint=/root/rocketmq/store/checkpoint
#abort 文件存儲路徑
abortFile=/root/rocketmq/store/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 異步復制Master
#- SYNC_MASTER 同步雙寫Master
#- SLAVE
brokerRole=SYNC_MASTER
#刷盤方式
#- ASYNC_FLUSH 異步刷盤
#- SYNC_FLUSH 同步刷盤
flushDiskType=SYNC_FLUSH
#checkTransactionMessageEnable=false
#發消息線程池數量
#sendMessageThreadPoolNums=128
#拉消息線程池數量
#pullMessageThreadPoolNums=128
2)slave2
服務器:192.168.150.100
vi /root/rocketmq/rocketmq-all-4.4.0-bin-release/conf/2m-2s-sync/broker-b-s.properties
修改配置如下:
#所屬集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此處不同的配置文件填寫的不一樣
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=1
#nameServer地址,分號分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
#在發送消息時,自動創建服務器不存在的topic,默認創建的隊列數
defaultTopicQueueNums=4
#是否允許 Broker 自動創建Topic,建議線下開啟,線上關閉
autoCreateTopicEnable=true
#是否允許 Broker 自動創建訂閱組,建議線下開啟,線上關閉
autoCreateSubscriptionGroup=true
#Broker 對外服務的監聽端口
listenPort=11011
#刪除文件時間點,默認凌晨 4點
deleteWhen=04
#文件保留時間,默認 48 小時
fileReservedTime=120
#commitLog每個文件的大小默認1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每個文件默認存30W條,根據業務情況調整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#檢測物理文件磁盤空間
diskMaxUsedSpaceRatio=88
#存儲路徑
storePathRootDir=/root/rocketmq/store_slave
#commitLog 存儲路徑
storePathCommitLog=/root/rocketmq/store_slave/commitlog
#消費隊列存儲路徑存儲路徑
storePathConsumeQueue=/root/rocketmq/store_slave/consumequeue
#消息索引存儲路徑
storePathIndex=/root/rocketmq/store_slave/index
#checkpoint 文件存儲路徑
storeCheckpoint=/root/rocketmq/store_slave/checkpoint
#abort 文件存儲路徑
abortFile=/root/rocketmq/store_slave/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 異步復制Master
#- SYNC_MASTER 同步雙寫Master
#- SLAVE
brokerRole=SLAVE
#刷盤方式
#- ASYNC_FLUSH 異步刷盤
#- SYNC_FLUSH 同步刷盤
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#發消息線程池數量
#sendMessageThreadPoolNums=128
#拉消息線程池數量
#pullMessageThreadPoolNums=128
3)master2
服務器:192.168.150.103
vi /root/rocketmq/rocketmq-all-4.4.0-bin-release/conf/2m-2s-sync/broker-b.properties
修改配置如下:
#所屬集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此處不同的配置文件填寫的不一樣
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分號分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
#在發送消息時,自動創建服務器不存在的topic,默認創建的隊列數
defaultTopicQueueNums=4
#是否允許 Broker 自動創建Topic,建議線下開啟,線上關閉
autoCreateTopicEnable=true
#是否允許 Broker 自動創建訂閱組,建議線下開啟,線上關閉
autoCreateSubscriptionGroup=true
#Broker 對外服務的監聽端口
listenPort=10911
#刪除文件時間點,默認凌晨 4點
deleteWhen=04
#文件保留時間,默認 48 小時
fileReservedTime=120
#commitLog每個文件的大小默認1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每個文件默認存30W條,根據業務情況調整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#檢測物理文件磁盤空間
diskMaxUsedSpaceRatio=88
#存儲路徑
storePathRootDir=/root/rocketmq/store
#commitLog 存儲路徑
storePathCommitLog=/root/rocketmq/store/commitlog
#消費隊列存儲路徑存儲路徑
storePathConsumeQueue=/root/rocketmq/store/consumequeue
#消息索引存儲路徑
storePathIndex=/root/rocketmq/store/index
#checkpoint 文件存儲路徑
storeCheckpoint=/root/rocketmq/store/checkpoint
#abort 文件存儲路徑
abortFile=/root/rocketmq/store/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 異步復制Master
#- SYNC_MASTER 同步雙寫Master
#- SLAVE
brokerRole=SYNC_MASTER
#刷盤方式
#- ASYNC_FLUSH 異步刷盤
#- SYNC_FLUSH 同步刷盤
flushDiskType=SYNC_FLUSH
#checkTransactionMessageEnable=false
#發消息線程池數量
#sendMessageThreadPoolNums=128
#拉消息線程池數量
#pullMessageThreadPoolNums=128
4)slave1
服務器:192.168.150.103
vi /root/rocketmq/rocketmq-all-4.4.0-bin-release/conf/2m-2s-sync/broker-a-s.properties
修改配置如下:
#所屬集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此處不同的配置文件填寫的不一樣
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=1
#nameServer地址,分號分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
#在發送消息時,自動創建服務器不存在的topic,默認創建的隊列數
defaultTopicQueueNums=4
#是否允許 Broker 自動創建Topic,建議線下開啟,線上關閉
autoCreateTopicEnable=true
#是否允許 Broker 自動創建訂閱組,建議線下開啟,線上關閉
autoCreateSubscriptionGroup=true
#Broker 對外服務的監聽端口
listenPort=11011
#刪除文件時間點,默認凌晨 4點
deleteWhen=04
#文件保留時間,默認 48 小時
fileReservedTime=120
#commitLog每個文件的大小默認1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每個文件默認存30W條,根據業務情況調整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#檢測物理文件磁盤空間
diskMaxUsedSpaceRatio=88
#存儲路徑
storePathRootDir=/root/rocketmq/store_slave
#commitLog 存儲路徑
storePathCommitLog=/root/rocketmq/store_slave/commitlog
#消費隊列存儲路徑存儲路徑
storePathConsumeQueue=/root/rocketmq/store_slave/consumequeue
#消息索引存儲路徑
storePathIndex=/root/rocketmq/store_slave/index
#checkpoint 文件存儲路徑
storeCheckpoint=/root/rocketmq/store_slave/checkpoint
#abort 文件存儲路徑
abortFile=/root/rocketmq/store_slave/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 異步復制Master
#- SYNC_MASTER 同步雙寫Master
#- SLAVE
brokerRole=SLAVE
#刷盤方式
#- ASYNC_FLUSH 異步刷盤
#- SYNC_FLUSH 同步刷盤
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#發消息線程池數量
#sendMessageThreadPoolNums=128
#拉消息線程池數量
#pullMessageThreadPoolNums=128
修改啟動腳本文件(2臺服務器都要)
1)runbroker.sh
vi /root/rocketmq/rocketmq-all-4.4.0-bin-release/bin/runbroker.sh
需要根據內存大小進行適當的對JVM參數進行調整:
#===================================================
# 開發環境配置 JVM Configuration
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m"
2)runserver.sh
vim /root/rocketmq/rocketmq-all-4.4.0-bin-release/bin/runserver.sh
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
服務啟動
1)啟動NameServe集群
分別在192.168.150.100和192.168.150.103啟動NameServer
cd /root/rocketmq/rocketmq-all-4.4.0-bin-release/bin
nohup sh mqnamesrv &
2)啟動Broker集群
- 在192.168.150.100上啟動master1和slave2
master1:
cd /root/rocketmq/rocketmq-all-4.4.0-bin-release/bin
nohup sh mqbroker -c /root/rocketmq/rocketmq-all-4.4.0-bin-release/conf/2m-2s-sync/broker-a.properties &
slave2:
cd /root/rocketmq/rocketmq-all-4.4.0-bin-release/bin
nohup sh mqbroker -c /root/rocketmq/rocketmq-all-4.4.0-bin-release/conf/2m-2s-sync/broker-b-s.properties &
- 在192.168.150.103上啟動master2和slave2
master2
cd /root/rocketmq/rocketmq-all-4.4.0-bin-release/bin
nohup sh mqbroker -c /root/rocketmq/rocketmq-all-4.4.0-bin-release/conf/2m-2s-sync/broker-b.properties &
slave1
cd /root/rocketmq/rocketmq-all-4.4.0-bin-release/bin
nohup sh mqbroker -c /root/rocketmq/rocketmq-all-4.4.0-bin-release/conf/2m-2s-sync/broker-a-s.properties &
- 問題描述:
如果啟動了第一個broker后,第二個broker總是起不來,注意看slave的存儲路徑是否跟master路徑 區分開了,在配置雙主雙從集群時,配置文件中相關的存儲路徑需要區分,主節點、從節點的數據不能保存在同一個目錄下
查看進程狀態
查看日志
# 查看nameServer日志
tail -500f ~/logs/rocketmqlogs/namesrv.log
# 查看broker日志
tail -500f ~/logs/rocketmqlogs/broker.log
集群監控平臺搭建rocketmq-console
- 修改rocketmq-console\src\main\resources\application.properties的mq集群地址
- maven打包
cd rocketmq-console
mvn clean package -Dmaven.test.skip=true
- 上傳jar包到部署了rocketmq的服務器啟動
java -jar rocketmq-console-ng-1.0.1.jar
- 瀏覽器打開界面
http://192.168.150.100:8080/