消息隊(duì)列之四: RocketMQ

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集群)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容