RocketMQ

文档

Docker Compose 安装 RocketMQ

# docker hub
services:
  namesrv:
    image: apache/rocketmq:5.3.4
    container_name: rmqnamesrv
    ports:
      - "9876:9876"
    networks:
      - rocketmq
    command: sh mqnamesrv
  broker:
    image: apache/rocketmq:5.3.4
    container_name: rmqbroker
    ports:
      - "10909:10909"
      - "10911:10911"
      - "10912:10912"
    environment:
      - NAMESRV_ADDR=rmqnamesrv:9876
    depends_on:
      - namesrv
    networks:
      - rocketmq
    command: sh mqbroker
  proxy:
    image: apache/rocketmq:5.3.4
    container_name: rmqproxy
    networks:
      - rocketmq
    depends_on:
      - broker
      - namesrv
    ports:
      - "8080:8080"
      - "8081:8081"
    restart: on-failure
    environment:
      - NAMESRV_ADDR=rmqnamesrv:9876
    command: sh mqproxy
networks:
  rocketmq:
    driver: bridge
# 国内镜像
services:
  namesrv:
    image: registry.cn-qingdao.aliyuncs.com/xuxiaoweicomcn/apache-rocketmq:5.3.4
    container_name: rmqnamesrv
    ports:
      - "9876:9876"
    networks:
      - rocketmq
    command: sh mqnamesrv
  broker:
    image: registry.cn-qingdao.aliyuncs.com/xuxiaoweicomcn/apache-rocketmq:5.3.4
    container_name: rmqbroker
    ports:
      - "10909:10909"
      - "10911:10911"
      - "10912:10912"
    environment:
      - NAMESRV_ADDR=rmqnamesrv:9876
    depends_on:
      - namesrv
    networks:
      - rocketmq
    command: sh mqbroker
  proxy:
    image: registry.cn-qingdao.aliyuncs.com/xuxiaoweicomcn/apache-rocketmq:5.3.4
    container_name: rmqproxy
    networks:
      - rocketmq
    depends_on:
      - broker
      - namesrv
    ports:
      - "8080:8080"
      - "8081:8081"
    restart: on-failure
    environment:
      - NAMESRV_ADDR=rmqnamesrv:9876
    command: sh mqproxy
networks:
  rocketmq:
    driver: bridge

Docker 安装 RocketMQ

创建网络

# 创建 RocketMQ 网络
docker network create rocketmq

名字服务器 NameServer

# docker hub
docker run -d --name rmqnamesrv -p 9876:9876 --network rocketmq apache/rocketmq:5.3.4 sh mqnamesrv
# 国内镜像
docker run -d --name rmqnamesrv -p 9876:9876 --network rocketmq registry.cn-qingdao.aliyuncs.com/xuxiaoweicomcn/apache-rocketmq:5.3.4 sh mqnamesrv

代理服务器 Broker

# docker hub
# 配置 Broker 的IP地址
echo "brokerIP1=127.0.0.1" > broker.conf

# 启动 Broker 和 Proxy
docker run -d \
--name rmqbroker \
--network rocketmq \
-p 10912:10912 -p 10911:10911 -p 10909:10909 \
-p 8080:8080 -p 8081:8081 \
-e "NAMESRV_ADDR=rmqnamesrv:9876" \
-v ./broker.conf:/home/rocketmq/rocketmq-5.3.4/conf/broker.conf \
apache/rocketmq:5.3.4 sh mqbroker --enable-proxy \
-c /home/rocketmq/rocketmq-5.3.4/conf/broker.conf
# 国内镜像
# 配置 Broker 的IP地址
echo "brokerIP1=127.0.0.1" > broker.conf

# 启动 Broker 和 Proxy
docker run -d \
--name rmqbroker \
--network rocketmq \
-p 10912:10912 -p 10911:10911 -p 10909:10909 \
-p 8080:8080 -p 8081:8081 \
-e "NAMESRV_ADDR=rmqnamesrv:9876" \
-v ./broker.conf:/home/rocketmq/rocketmq-5.3.4/conf/broker.conf \
registry.cn-qingdao.aliyuncs.com/xuxiaoweicomcn/apache-rocketmq:5.3.4 sh mqbroker --enable-proxy \
-c /home/rocketmq/rocketmq-5.3.4/conf/broker.conf

Linux 安装 RocketMQ

下载 RocketMQ

  • RocketMQ 5.3.4 的 runserver.shrunbroker.sh 文件存在问题,
    导致无法使用 环境变量 JAVA_HOME
    需要禁用 runserver.shrunbroker.sh 中的 find_java_home 方法
    sed -i 's#find_java_home$#\#find_java_home#' rocketmq-all-5.3.4-bin-release/bin/runserver.sh
    sed -i 's#find_java_home$#\#find_java_home#' rocketmq-all-5.3.4-bin-release/bin/runbroker.sh
    
# 下载、解压 5.3.4
wget https://archive.apache.org/dist/rocketmq/5.3.4/rocketmq-all-5.3.4-bin-release.zip
ls -lh rocketmq-all-5.3.4-bin-release.zip
unzip rocketmq-all-5.3.4-bin-release.zip
ls -lh rocketmq-all-5.3.4-bin-release
# 下载、解压 4.9.8
wget https://archive.apache.org/dist/rocketmq/4.9.8/rocketmq-all-4.9.8-bin-release.zip
ls -lh rocketmq-all-4.9.8-bin-release.zip
unzip rocketmq-all-4.9.8-bin-release.zip
ls -lh rocketmq-all-4.9.8-bin-release

配置 RocketMQ

  • RocketMQ 需要 Java 1.8+ 环境才能运行,需要配置 环境变量 JAVA_HOME

配置 RocketMQ 名字服务器 NameServer

命令 介绍
systemctl status rocketmq-nameserver.service --no-pager -l 查看 RocketMQ 状态
systemctl start rocketmq-nameserver.service 启动 RocketMQ
systemctl stop rocketmq-nameserver.service 停止 RocketMQ
systemctl restart rocketmq-nameserver.service 重启 RocketMQ
systemctl is-enabled rocketmq-nameserver.service 查看 RocketMQ 开启自启状态
systemctl enable rocketmq-nameserver.service 打开 RocketMQ 开启自启
systemctl disable rocketmq-nameserver.service 关闭 RocketMQ 开启自启
# 配置 RocketMQ 5.3.4 NameServer Linux Service
cat <<EOF | tee /lib/systemd/system/rocketmq-nameserver.service
[Unit]
After=syslog.target

[Service]
# TODO 配置 JAVA_HOME 路径
Environment="JAVA_HOME=/srv/dragonwell-8.27.26"
ExecStart=/srv/rocketmq-all-5.3.4-bin-release/bin/mqnamesrv
ExecStop=/srv/rocketmq-all-5.3.4-bin-release/bin/mqshutdown namesrv

Restart=always
RestartSec=10
StartLimitInterval=60s
StartLimitBurst=3

[Install]
WantedBy=multi-user.target

EOF
# 配置 RocketMQ 4.9.8 NameServer Linux Service
cat <<EOF | tee /lib/systemd/system/rocketmq-nameserver.service
[Unit]
After=syslog.target

[Service]
# TODO 配置 JAVA_HOME 路径
Environment="JAVA_HOME=/srv/dragonwell-8.27.26"
ExecStart=/srv/rocketmq-all-4.9.8-bin-release/bin/mqnamesrv
ExecStop=/srv/rocketmq-all-4.9.8-bin-release/bin/mqshutdown namesrv

Restart=always
RestartSec=10
StartLimitInterval=60s
StartLimitBurst=3

[Install]
WantedBy=multi-user.target

EOF

配置 RocketMQ 代理服务器 Broker

命令 介绍
systemctl status rocketmq-broker.service --no-pager -l 查看 RocketMQ 状态
systemctl start rocketmq-broker.service 启动 RocketMQ
systemctl stop rocketmq-broker.service 停止 RocketMQ
systemctl restart rocketmq-broker.service 重启 RocketMQ
systemctl is-enabled rocketmq-broker.service 查看 RocketMQ 开启自启状态
systemctl enable rocketmq-broker.service 打开 RocketMQ 开启自启
systemctl disable rocketmq-broker.service 关闭 RocketMQ 开启自启
# 配置 RocketMQ 5.3.4 Broker Linux Service
cat <<EOF | tee /lib/systemd/system/rocketmq-broker.service
[Unit]
After=syslog.target

[Service]
# TODO 配置 JAVA_HOME 路径
Environment="JAVA_HOME=/srv/dragonwell-8.27.26"
ExecStart=/srv/rocketmq-all-5.3.4-bin-release/bin/mqbroker -n localhost:9876
ExecStop=/srv/rocketmq-all-5.3.4-bin-release/bin/mqshutdown broker

Restart=always
RestartSec=10
StartLimitInterval=60s
StartLimitBurst=3

[Install]
WantedBy=multi-user.target

EOF
# 配置 RocketMQ 4.9.8 Broker Linux Service
cat <<EOF | tee /lib/systemd/system/rocketmq-broker.service
[Unit]
After=syslog.target

[Service]
# TODO 配置 JAVA_HOME 路径
Environment="JAVA_HOME=/srv/dragonwell-8.27.26"
ExecStart=/srv/rocketmq-all-4.9.8-bin-release/bin/mqbroker -n localhost:9876
ExecStop=/srv/rocketmq-all-4.9.8-bin-release/bin/mqshutdown broker

Restart=always
RestartSec=10
StartLimitInterval=60s
StartLimitBurst=3

[Install]
WantedBy=multi-user.target

EOF

日志

日志 说明
~/logs/rocketmqlogs/broker.log
~/logs/rocketmqlogs/broker_default.log
~/logs/rocketmqlogs/commercial.log
~/logs/rocketmqlogs/filter.log
~/logs/rocketmqlogs/lock.log
~/logs/rocketmqlogs/namesrv.log
~/logs/rocketmqlogs/namesrv_default.log
~/logs/rocketmqlogs/protection.log
~/logs/rocketmqlogs/remoting.log
~/logs/rocketmqlogs/stats.log
~/logs/rocketmqlogs/store.log
~/logs/rocketmqlogs/storeerror.log
~/logs/rocketmqlogs/transaction.log
~/logs/rocketmqlogs/watermark.log

服务说明

# 查看 名字服务器 NameServer 状态:正常运行
# 提示下列内容,说明正常运行
# The Name Server boot success. serializeType=JSON
systemctl status rocketmq-nameserver.service --no-pager -l
# 查看示例
root@localhost:~# systemctl status rocketmq-nameserver.service --no-pager -l
* rocketmq-nameserver.service
     Loaded: loaded (/usr/lib/systemd/system/rocketmq-nameserver.service; disabled; preset: enabled)
     Active: active (running) since Thu 2025-12-25 14:46:58 CST; 1min 40s ago
 Invocation: 3e04a074d0454dd98c72c9658624873d
   Main PID: 4033 (mqnamesrv)
      Tasks: 32 (limit: 9458)
     Memory: 80.6M (peak: 143.5M, swap: 112.9M, swap peak: 114.6M)
        CPU: 2.492s
     CGroup: /system.slice/rocketmq-nameserver.service
             |-4033 /bin/sh /srv/rocketmq-all-4.9.8-bin-release/bin/mqnamesrv
             |-4037 sh /srv/rocketmq-all-4.9.8-bin-release/bin/runserver.sh org.apache.rocketmq.namesrv.NamesrvStartup
             `-4057 /srv/dragonwell-8.27.26/bin/java -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=8 -XX:-UseParNewGC -verbose:gc -Xloggc:/dev/shm/rmq_srv_gc_%p_%t.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m -XX:-OmitStackTraceInFastThrow -XX:-UseLargePages -cp ".:/srv/rocketmq-all-4.9.8-bin-release/bin/../conf:/srv/rocketmq-all-4.9.8-bin-release/bin/../lib/*:" org.apache.rocketmq.namesrv.NamesrvStartup

Dec 25 14:46:58 localhost.localdomain systemd[1]: Started rocketmq-nameserver.service.
Dec 25 14:46:58 localhost.localdomain mqnamesrv[4057]: OpenJDK 64-Bit Server VM warning: Using the DefNew young collector with the CMS collector is deprecated and will likely be removed in a future release
Dec 25 14:46:58 localhost.localdomain mqnamesrv[4057]: OpenJDK 64-Bit Server VM warning: UseCMSCompactAtFullCollection is deprecated and will likely be removed in a future release.
Dec 25 14:46:59 localhost.localdomain mqnamesrv[4057]: The Name Server boot success. serializeType=JSON
root@localhost:~# 
# 查看 代理服务器 Broker 状态:正常运行
# 提示下列内容,说明正常运行
# The broker[localhost.localdomain, 172.25.25.203:10911] boot success. serializeType=JSON and name server is localhost:9876
systemctl status rocketmq-broker.service --no-pager -l
# 查看示例
root@localhost:~# systemctl status rocketmq-broker.service --no-pager -l
* rocketmq-broker.service
     Loaded: loaded (/usr/lib/systemd/system/rocketmq-broker.service; disabled; preset: enabled)
     Active: active (running) since Thu 2025-12-25 14:47:17 CST; 1min 34s ago
 Invocation: ea125c2e0d5b4e4ea3ae8d6394ef42cf
   Main PID: 4541 (mqbroker)
      Tasks: 88 (limit: 9458)
     Memory: 7.1G (peak: 7.4G, swap: 7.7M, swap peak: 17M)
        CPU: 11.414s
     CGroup: /system.slice/rocketmq-broker.service
             |-4541 /bin/sh /srv/rocketmq-all-4.9.8-bin-release/bin/mqbroker -n localhost:9876
             |-4545 sh /srv/rocketmq-all-4.9.8-bin-release/bin/runbroker.sh org.apache.rocketmq.broker.BrokerStartup -n localhost:9876
             `-4568 /srv/dragonwell-8.27.26/bin/java -server -Xms8g -Xmx8g -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:SoftRefLRUPolicyMSPerMB=0 -verbose:gc -Xloggc:/dev/shm/rmq_srv_gc_%p_%t.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintAdaptiveSizePolicy -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m -XX:-OmitStackTraceInFastThrow -XX:+AlwaysPreTouch -XX:MaxDirectMemorySize=15g -XX:-UseLargePages -XX:-UseBiasedLocking -cp ".:/srv/rocketmq-all-4.9.8-bin-release/bin/../conf:/srv/rocketmq-all-4.9.8-bin-release/bin/../lib/*:" org.apache.rocketmq.broker.BrokerStartup -n localhost:9876

Dec 25 14:47:17 localhost.localdomain systemd[1]: Started rocketmq-broker.service.
Dec 25 14:47:23 localhost.localdomain mqbroker[4568]: The broker[localhost.localdomain, 172.25.25.203:10911] boot success. serializeType=JSON and name server is localhost:9876
root@localhost:~#