RocketMQ
本文提供 RocketMQ 的配置示例与配置原因说明,遵循本目录统一规范(单应用 compose + 复用 app-net)。
1. 目录与挂载约定
/app
├─ docker-compose.rocketmq.yml
└─ rocketmq/
├─ broker/
│ ├─ conf/
│ ├─ logs/
│ └─ store/
└─ namesrv/
└─ logs/
说明:
broker/conf:Broker 配置目录,独立维护集群与存储参数broker/logs:Broker 运行日志目录broker/store:消息存储目录,容器重建后消息不丢失namesrv/logs:NameServer 日志目录,便于排障
2. 目录权限设置
RocketMQ 官方镜像默认以 root 运行,无需特殊权限设置。创建目录即可:
# 创建目录
mkdir -p /app/rocketmq/{broker/{conf,logs,store},namesrv/logs}
# 创建 broker 配置文件
touch /app/rocketmq/broker/conf/broker.conf
3. Compose 配置示例
/app/docker-compose.rocketmq.yml:
services:
rocketmq-namesrv:
image: apache/rocketmq:5.3.2
container_name: rocketmq-namesrv
restart: unless-stopped
command: sh mqnamesrv
ports:
- "9876:9876"
environment:
TZ: Asia/Shanghai
volumes:
- /app/rocketmq/namesrv/logs:/home/rocketmq/logs
healthcheck:
test: ["CMD", "sh", "-c", "nc -z localhost 9876"]
interval: 30s
timeout: 20s
retries: 3
start_period: 40s
networks:
- app-net
rocketmq-broker:
image: apache/rocketmq:5.3.2
container_name: rocketmq-broker
restart: unless-stopped
depends_on:
- rocketmq-namesrv
command: sh mqbroker -c /home/rocketmq/rocketmq-5.3.2/conf/broker.conf
ports:
- "10909:10909"
- "10911:10911"
- "10912:10912"
environment:
NAMESRV_ADDR: rocketmq-namesrv:9876
TZ: Asia/Shanghai
volumes:
- /app/rocketmq/broker/conf/broker.conf:/home/rocketmq/rocketmq-5.3.2/conf/broker.conf:ro
- /app/rocketmq/broker/logs:/home/rocketmq/logs
- /app/rocketmq/broker/store:/home/rocketmq/store
healthcheck:
test: ["CMD", "sh", "-c", "nc -z localhost 10911"]
interval: 30s
timeout: 20s
retries: 3
start_period: 60s
networks:
- app-net
networks:
app-net:
external: true
配置原因:
- NameServer 与 Broker 拆分,符合 RocketMQ 基础架构
- 通过容器名
rocketmq-namesrv:9876直连 NameServer,简化服务发现 - Broker 日志与消息存储独立挂载,便于监控、备份和容量管理
- 复用
app-net,便于业务容器直连 MQ 服务 - 增加
healthcheck,可快速识别 NameServer/Broker 端口可用状态
4. Broker 配置示例
/app/rocketmq/broker/conf/broker.conf:
brokerClusterName=DefaultCluster
brokerName=broker-a
brokerId=0
deleteWhen=04
fileReservedTime=48
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
autoCreateTopicEnable=true
listenPort=10911
namesrvAddr=rocketmq-namesrv:9876
配置原因:
- 单机场景使用
ASYNC_MASTER,兼顾可用性与资源消耗 - 设置
fileReservedTime控制消息文件保留时长,避免磁盘无限增长 - 显式声明
namesrvAddr,保证 Broker 启动后可注册到 NameServer
5. 常用命令
# 启动 RocketMQ
docker compose -f /app/docker-compose.rocketmq.yml up -d
# 关闭 RocketMQ
docker compose -f /app/docker-compose.rocketmq.yml down
# 查看 Broker 日志
docker logs -f rocketmq-broker