鏡像方式安裝
首先再把上一接中提到的 RocketMQ 部署架構圖看一下。
從圖中可以看出,RocketMQ的服務端分為兩塊 Name Server 和 Broker。
- Name Server:是一個幾乎無狀態節點,可集群部署,在消息隊列RocketMQ版中提供命名服務,更新和發現Broker服務。
- Broker:消息中轉角色,負責存儲消息,轉發消息。分為Master Broker和Slave Broker,一個Master Broker可以對應多個Slave Broker,但是一個Slave Broker只能對應一個Master Broker。Broker啟動后需要完成一次將自己注冊至Name Server的操作;隨后每隔30s定期向Name Server上報Topic路由信息。
啟動NameServer服務
創建NameServer數據存儲路徑:
mkdir -p /home/rocketmq/data/namesrv/logs /home/rocketmq/data/namesrv/store
構建 NameServer 容器:
docker run -d \
--name rmqnamesrv \
-p 9876:9876 \
-v /home/rocketmq/data/namesrv/logs:/root/logs \
-v /home/rocketmq/data/namesrv/store:/root/store \
-e "MAX_POSSIBLE_HEAP=100000000" \
rocketmqinc/rocketmq \
sh mqnamesrv
啟動Broker服務
創建Broker數據存儲路徑:
mkdir -p /home/rocketmq/data/broker/logs /home/rocketmq/data/broker/store /home/rocketmq/conf
在/home/rocketmq/conf 目錄下創建 broker.conf 文件,內容如下:
# 所屬集群名稱,如果節點較多可以配置多個
brokerClusterName = DefaultCluster
#broker名稱,master和slave使用相同的名稱,表明他們的主從關系
brokerName = broker-a
#0表示Master,大於0表示不同的slave
brokerId = 0
#表示幾點做消息刪除動作,默認是凌晨4點
deleteWhen = 04
#在磁盤上保留消息的時長,單位是小時
fileReservedTime = 48
#有三個值:SYNC_MASTER,ASYNC_MASTER,SLAVE;同步和異步表示Master和Slave之間同步數據的機制;
brokerRole = ASYNC_MASTER
#刷盤策略,取值為:ASYNC_FLUSH,SYNC_FLUSH表示同步刷盤和異步刷盤;SYNC_FLUSH消息寫入磁盤后才返回成功狀態,ASYNC_FLUSH不需要;
flushDiskType = ASYNC_FLUSH
# 設置broker節點所在服務器的ip地址
brokerIP1 = 172.16.250.129
構建 Broker 容器:
docker run -d \
--name rmqbroker \
--link rmqnamesrv:namesrv \
-p 10911:10911 \
-p 10909:10909 \
-v /home/rocketmq/data/broker/logs:/root/logs \
-v /home/rocketmq/data/broker/store:/root/store \
-v /home/rocketmq/conf/broker.conf:/opt/rocketmq-4.4.0/conf/broker.conf \
-e "NAMESRV_ADDR=namesrv:9876" \
-e "MAX_POSSIBLE_HEAP=200000000" \
rocketmqinc/rocketmq \
sh mqbroker -c /opt/rocketmq-4.4.0/conf/broker.conf
控制台
構建rockermq-console容器:
docker run -d \
--name rmqadmin \
-e "JAVA_OPTS=-Drocketmq.namesrv.addr=172.16.250.129:9876 \
-Dcom.rocketmq.sendMessageWithVIPChannel=false \
-Duser.timezone='Asia/Shanghai'" \
-v /etc/localtime:/etc/localtime \
-p 9999:8080 \
pangliang/rocketmq-console-ng
訪問 http://172.16.250.129:9999/#/cluster 如下圖說明安裝成功:
二進制包方式安裝
下載地址:
https://www.apache.org/dyn/closer.cgi?path=rocketmq/4.5.0/rocketmq-all-4.5.0-bin-release.zip
環境要求:
- Linux64位系統
- JDK1.8(64位)
啟動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
若啟動報內存不足啟動失敗,需要編輯如下兩個配置文件,修改JVM內存大小:
vi runbroker.sh
vi runserver.sh
- 參考配置:
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
測試RocketMQ
發送消息
進入 rmqnamesrv 容器:
[root@localhost ~]# docker exec -it 95a52e07151c bash
[root@95a52e07151c bin]#
# 1.設置環境變量
export NAMESRV_ADDR=172.16.250.129:9876
# 2.使用安裝包的Demo發送消息
sh tools.sh org.apache.rocketmq.example.quickstart.Producer
消費消息
# 1.設置環境變量
export NAMESRV_ADDR=localhost:9876
# 2.接收消息
sh tools.sh org.apache.rocketmq.example.quickstart.Consumer