如何在docker中安装rocketmq

7人浏览 / 0人评论 / 添加收藏

⚙️ 方案一:分步部署 (使用 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 部署更方便,易于管理和复用。

首先,创建一个 docker-compose.yml 文件,将以下配置模板写入其中,并根据需要修改。注意,必须将 broker.conf 中的 brokerIP1environment 里的 NAMESRV_ADDR 替换为你自己的信息。

适用于 RocketMQ 5.x

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

适用于 RocketMQ 4.x

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

📊 部署可视化控制台 (Dashboard)

如果需要图形化管理界面,可以部署 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.ymldocker run 命令中的端口映射格式是否正确 (宿主机端口:容器端口)。
内存不足 在启动命令中通过 JAVA_OPT_EXTJAVA_OPTS 环境变量限制 NameServer 和 Broker 的 JVM 堆内存大小。
JDK版本不兼容 请确保宿主机 JDK 版本为 1.8 及以上(64位)。

全部评论