1.概述
2.安裝部署
2.1 centos7上安裝RocketMQ單機(jī)版
#在 /opt/software 目錄下, 執(zhí)行下載命令
wget https://mirrors.tuna.tsinghua.edu.cn/apache/rocketmq/4.7.1/rocketmq-all-4.7.1-bin-release.zip
#解壓縮
unzip rocketmq-all-4.7.1-bin-release.zip
#啟動(dòng)nameserver (默認(rèn)端口9876)
nohup sh bin/mqnamesrv &
#查看nameserver啟動(dòng)情況
lsof -i:9876
#查看nameserver啟動(dòng)日志 (有 The Name Server boot success. serializeType=JSON 表示成功)
tail -f ~/logs/rocketmqlogs/namesrv.log
#啟動(dòng)broker前, 先修改下 bin/runbroker.sh 和 bin/runserver.sh啟動(dòng)參數(shù)
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
#啟動(dòng)broker前, 先修改下 conf/broker.conf配置文件, 啟動(dòng)時(shí)指定broker注冊(cè)ip地址
namesrvAddr=192.168.0.156:9876
brokerIP1=192.168.0.156
#啟動(dòng)broker, 指定 broker.conf
nohup sh bin/mqbroker -n 192.168.0.156:9876 -c conf/broker.conf &
#查看broker日志
tail -f ~/logs/rocketmqlogs/broker.log
#查看進(jìn)程
[root@bogon rocketmqlogs]# jps
4067 Kafka
9862 Jps
9705 BrokerStartup
8495 NamesrvStartup
#消息生產(chǎn)者
#xshell中打開一個(gè)窗口, 設(shè)置臨時(shí)環(huán)境變量
export NAMESRV_ADDR=localhost:9876
#使用安裝包中的sh腳本發(fā)送消息
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
#消息消費(fèi)者
>> xshell中新打開一個(gè)窗口, 設(shè)置臨時(shí)環(huán)境變量
export NAMESRV_ADDR=localhost:9876
>> 使用安裝包中的sh腳本接收消息
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
#關(guān)閉namesrv
sh bin/mqshutdown namesrv
#關(guān)閉broker
sh bin/mqshutdown broker
2.2 centos7 上借助 docker-compose安裝集群版(2主)
2.2.1 在centos7上創(chuàng)建文件夾
mkdir -p /opt/rocketmq/logs/nameserver-a
mkdir -p /opt/rocketmq/logs/nameserver-b
mkdir -p /opt/rocketmq/store/nameserver-a
mkdir -p /opt/rocketmq/store/nameserver-b
mkdir -p /opt/rocketmq/logs/broker-a
mkdir -p /opt/rocketmq/logs/broker-b
mkdir -p /opt/rocketmq/store/broker-a
mkdir -p /opt/rocketmq/store/broker-b
mkdir -p /home/rocketmq/broker-a/
mkdir -p /home/rocketmq/broker-b/
2.2.2 創(chuàng)建文件
/home/rocketmq/broker-a/ 文件夾下創(chuàng)建文件: broker-a.conf
brokerClusterName=rocketmq-cluster
brokerName=broker-a
brokerId=0
#這個(gè)很有講究 如果是正式環(huán)境 這里一定要填寫內(nèi)網(wǎng)地址(安全)
#如果是用于測試或者本地這里建議要填外網(wǎng)地址,因?yàn)槟愕谋镜卮a是無法連接到阿里云內(nèi)網(wǎng),只能連接外網(wǎng)。
brokerIP1=192.168.0.156
deleteWhen=04
fileReservedTime=48
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
# 內(nèi)網(wǎng)的(阿里云有內(nèi)網(wǎng)IP和外網(wǎng)IP)
namesrvAddr=192.168.0.156:9876;192.168.0.156:9877
autoCreateTopicEnable=true
#Broker 對(duì)外服務(wù)的監(jiān)聽端口,
listenPort=10911
#Broker角色
#- ASYNC_MASTER 異步復(fù)制Master
#- SYNC_MASTER 同步雙寫Master
#- SLAVE
brokerRole=ASYNC_MASTER
#刷盤方式
#- ASYNC_FLUSH 異步刷盤
#- SYNC_FLUSH 同步刷盤
flushDiskType=ASYNC_FLUSH
/home/rocketmq/broker-b/ 文件夾下創(chuàng)建文件: broker-b.conf
brokerClusterName = rocketmq-cluster
brokerName = broker-b
brokerId = 0
brokerIP1 = 192.168.0.156
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
# 內(nèi)網(wǎng)的(阿里云有內(nèi)網(wǎng)IP和外網(wǎng)IP)
namesrvAddr=192.168.0.156:9876;192.168.0.156:9877
autoCreateTopicEnable=true
#Broker 對(duì)外服務(wù)的監(jiān)聽端口,
listenPort = 10909
#Broker角色
#- ASYNC_MASTER 異步復(fù)制Master
#- SYNC_MASTER 同步雙寫Master
#- SLAVE
brokerRole=ASYNC_MASTER
#刷盤方式
#- ASYNC_FLUSH 異步刷盤
#- SYNC_FLUSH 同步刷盤
flushDiskType=ASYNC_FLUSH
/opt/rocketmq/ 文件夾下創(chuàng)建文件: docker-compose.yml
version: '3.5'
services:
rmqnamesrv-a:
image: rocketmqinc/rocketmq:4.4.0
container_name: rmqnamesrv-a
ports:
- 9876:9876
volumes:
- /opt/rocketmq/logs/nameserver-a:/opt/logs
- /opt/rocketmq/store/nameserver-a:/opt/store
command: sh mqnamesrv
networks:
rmq:
aliases:
- rmqnamesrv-a
rmqnamesrv-b:
image: rocketmqinc/rocketmq:4.4.0
container_name: rmqnamesrv-b
ports:
- 9877:9876
volumes:
- /opt/rocketmq/logs/nameserver-b:/opt/logs
- /opt/rocketmq/store/nameserver-b:/opt/store
command: sh mqnamesrv
networks:
rmq:
aliases:
- rmqnamesrv-b
rmqbroker-a:
image: rocketmqinc/rocketmq:4.4.0
container_name: rmqbroker-a
ports:
- 10911:10911
#解決 docker-compose 的 volume 映射發(fā)生 Permission denied 問題
privileged: true
volumes:
- /opt/rocketmq/logs/broker-a:/opt/logs
- /opt/rocketmq/store/broker-a:/opt/store
- /home/rocketmq/broker-a/broker-a.conf:/opt/rocketmq-4.4.0/conf/broker.conf
environment:
TZ: Asia/Shanghai
NAMESRV_ADDR: "rmqnamesrv-a:9876"
JAVA_OPTS: " -Duser.home=/opt"
JAVA_OPT_EXT: "-server -Xms256m -Xmx256m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
command: sh mqbroker -n 192.168.0.156:9876;192.168.0.156:9877 -c /opt/rocketmq-4.4.0/conf/broker.conf autoCreateTopicEnable=true &
depends_on:
- rmqnamesrv-a
- rmqnamesrv-b
links:
- rmqnamesrv-a:rmqnamesrv-a
- rmqnamesrv-b:rmqnamesrv-b
networks:
rmq:
aliases:
- rmqbroker-a
rmqbroker-b:
image: rocketmqinc/rocketmq:4.4.0
container_name: rmqbroker-b
ports:
- 10909:10909
#解決 docker-compose 的 volume 映射發(fā)生 Permission denied 問題
privileged: true
volumes:
- /opt/rocketmq/logs/broker-b:/opt/logs
- /opt/rocketmq/store/broker-b:/opt/store
- /home/rocketmq/broker-b/broker-b.conf:/opt/rocketmq-4.4.0/conf/broker.conf
environment:
TZ: Asia/Shanghai
NAMESRV_ADDR: "rmqnamesrv-b:9876"
JAVA_OPTS: " -Duser.home=/opt"
JAVA_OPT_EXT: "-server -Xms256m -Xmx256m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
command: sh mqbroker -n 192.168.0.156:9876;192.168.0.156:9877 -c /opt/rocketmq-4.4.0/conf/broker.conf autoCreateTopicEnable=true &
depends_on:
- rmqnamesrv-a
- rmqnamesrv-b
links:
- rmqnamesrv-a:rmqnamesrv-a
- rmqnamesrv-b:rmqnamesrv-b
networks:
rmq:
aliases:
- rmqbroker-b
rmqconsole:
image: styletang/rocketmq-console-ng
container_name: rmqconsole
# 注意, 這里端口映射時(shí), 要是8080.
ports:
- 9001:8080
environment:
JAVA_OPTS: "-Drocketmq.namesrv.addr=rmqnamesrv-a:9876;rmqnamesrv-b:9877 -Dcom.rocketmq.sendMessageWithVIPChannel=false"
depends_on:
- rmqnamesrv-a
- rmqnamesrv-b
networks:
rmq:
aliases:
- rmqconsole
networks:
rmq:
name: rmq
driver: bridge
2.2.3 啟動(dòng)集群
#執(zhí)行前, 先確保
#開啟docker掛載權(quán)限: chmod a+rw /var/run/docker.sock
#開啟了可執(zhí)行權(quán)限: chmod +x /usr/local/bin/docker-compose
docker-compose -f docker-compose.yml up -d
2.2.4 啟動(dòng)反饋
啟動(dòng)成功后, 自行用java api 連接進(jìn)行測試即可.

啟動(dòng)成功標(biāo)識(shí).png

rocketmq管理臺(tái).png
6.常見問題
6.1 org.apache.rocketmq.client.exception.MQClientException: No route info of this topic
sh mqbroker -n 192.168.0.156:9876 -c /opt/rocketmq-4.4.0/conf/broker.conf autoCreateTopicEnable=true
升級(jí)至4.4.0 以上版本, 基本可解決
參考資料
https://www.cnblogs.com/ifme/p/13079735.html (常規(guī)虛擬機(jī)搭建集群)
https://www.cnblogs.com/qdhxhz/p/11096682.html (docker搭建2m集群)
https://blog.csdn.net/wangxiaoyan2/article/details/106237900 (docker搭建2m2s集群)