⚙️ 方案一:分步部署 (使用 Docker 命令)这种方式可以帮你更清楚地理解 RocketMQ 各组件的启动过程。
启动 NameServer
必须首先启动,作为路由注册中心,它负责管理 Broker 的地址信息。
docker run -d \
--name rmqnamesrv \
--network rocketmq \
-p 9876:9876 \
-e "JAVA_OPT_EXT=-Xms256m -Xmx256m" \
apache/rocketmq:5.3.2 \
sh mqnamesrv
注意:将 5.3.2 替换为你需要的版本号。通过 docker logs -f rmqnamesrv 查看日志,若出现 “The Name Server boot success..” 表示启动成功。
启动 Broker + Proxy
Broker 是消息存储和转发的核心。在 RocketMQ 5.x 版本中,启动 Broker 时建议同时启用 Proxy 组件,它承担了客户端的部分计算任务,使客户端更轻量。启动前,需创建一个 broker.conf 文件,写入 brokerIP1=你的宿主机IP,这一步非常关键,如果缺失,外部客户端可能因无法解析容器内部 IP 而连接失败。
# 1. 创建配置文件 (将 127.0.0.1 替换为你的宿主机真实IP)
echo "brokerIP1=127.0.0.1" > broker.conf
# 2. 启动 Broker 和 Proxy
docker run -d \
--name rmqbroker \
--network rocketmq \
-p 10909:10909 -p 10911:10911 -p 10912:10912 \
-p 8080:8080 -p 8081:8081 \
-e "NAMESRV_ADDR=rmqnamesrv:9876" \
-v ./broker.conf:/home/rocketmq/rocketmq-5.3.2/conf/broker.conf \
apache/rocketmq:5.3.2 \
sh mqbroker --enable-proxy \
-c /home/rocketmq/rocketmq-5.3.2/conf/broker.conf
注意:请确保 -v 挂载路径中的版本号与你拉取的镜像版本一致。若日志中出现 “The broker[brokerName,ip:port] boot success..” 表示启动成功。
关键端口说明:
| 端口 | 用途 |
|---|---|
| 9876 | NameServer 服务端口 |
| 10911 | Broker 对外服务端口,客户端连接此端口收发消息 |
| 10909, 10912 | Broker 内部通信端口 |
| 8080, 8081 | RocketMQ 5.x 内置 Proxy 的 gRPC 和 HTTP 服务端口 |
使用 Docker Compose 部署更方便,易于管理和复用。
首先,创建一个 docker-compose.yml 文件,将以下配置模板写入其中,并根据需要修改。注意,必须将 broker.conf 中的 brokerIP1 和 environment 里的 NAMESRV_ADDR 替换为你自己的信息。
version: '3.8'
services:
namesrv:
image: apache/rocketmq:5.3.2
container_name: rmqnamesrv
ports:
- "9876:9876"
networks:
- rocketmq
environment:
- JAVA_OPT_EXT=-Xms256m -Xmx256m
command: sh mqnamesrv
broker:
image: apache/rocketmq:5.3.2
container_name: rmqbroker
ports:
- "10909:10909"
- "10911:10911"
- "10912:10912"
- "8080:8080"
- "8081:8081"
networks:
- rocketmq
depends_on:
- namesrv
environment:
- NAMESRV_ADDR=namesrv:9876 # 必须修改为实际的 NameServer 地址
volumes:
- ./broker.conf:/home/rocketmq/rocketmq-5.3.2/conf/broker.conf
command: sh mqbroker --enable-proxy -c /home/rocketmq/rocketmq-5.3.2/conf/broker.conf
networks:
rocketmq:
driver: bridge
version: '3.8'
services:
namesrv:
image: apache/rocketmq:4.9.6
container_name: rmqnamesrv
ports:
- "9876:9876"
networks:
- rocketmq
command: sh mqnamesrv
broker:
image: apache/rocketmq:4.9.6
container_name: rmqbroker
ports:
- "10909:10909"
- "10911:10911"
- "10912:10912"
networks:
- rocketmq
depends_on:
- namesrv
environment:
- NAMESRV_ADDR=rmqnamesrv:9876 # 必须修改为实际的 NameServer 地址
volumes:
- ./broker.conf:/home/rocketmq/rocketmq-4.9.6/conf/broker.conf
command: sh mqbroker -c /home/rocketmq/rocketmq-4.9.6/conf/broker.conf
networks:
rocketmq:
driver: bridge
最后,在 docker-compose.yml 文件所在目录下执行以下命令即可后台启动所有服务:
docker-compose up -d
如果需要图形化管理界面,可以部署 RocketMQ Dashboard,方便创建和管理 Topic。
docker run -d \
--name rmqdashboard \
--network rocketmq \
-p 8088:8080 \
-e "JAVA_OPTS=-Drocketmq.namesrv.addr=rmqnamesrv:9876 -Drocketmq.config.isVIPChannel=false" \
apacherocketmq/rocketmq-dashboard:latest
注意:这里将容器的 8080 端口映射到了宿主机的 8088 端口,以避免与 Broker 的 Proxy 端口冲突。启动后,访问 http://你的宿主机IP:8088 即可打开控制台。
部署完成后,可以进入 Broker 容器运行内置脚本验证消息收发是否正常:
# 进入 Broker 容器
docker exec -it rmqbroker bash
# 使用内置脚本测试消息收发
sh tools.sh org.apache.rocketmq.example.quickstart.Producer
sh tools.sh org.apache.rocketmq.example.quickstart.Consumer
如果能看到 “SendResult” 和 “Receive New Messages” 等输出,说明部署成功。
| 问题 | 解决方案 |
|---|---|
| Broker 启动失败 | 检查 brokerIP1 是否配置为宿主机真实 IP(非 127.0.0.1 或容器 IP)。这是最常见的原因。 |
| Console 连不上 Broker | 先确认 Broker 是否成功注册到 NameServer。如果控制台无法访问,请检查防火墙是否放行了控制台端口(如 8088)。 |
| 端口映射不生效 | 检查 docker-compose.yml 或 docker run 命令中的端口映射格式是否正确 (宿主机端口:容器端口)。 |
| 内存不足 | 在启动命令中通过 JAVA_OPT_EXT 或 JAVA_OPTS 环境变量限制 NameServer 和 Broker 的 JVM 堆内存大小。 |
| JDK版本不兼容 | 请确保宿主机 JDK 版本为 1.8 及以上(64位)。 |

微信扫码加好友
全部评论