RocketMQ是阿里巴巴开源的分布式消息中间件,在微服务架构中扮演着重要角色。本文将详细介绍如何在Windows系统中使用Docker来搭建和使用RocketMQ环境。

环境准备

Docker安装

访问Docker官网下载Docker Desktop for Windows
安装完成后,确保Docker服务正常运行
打开PowerShell,运行以下命令验证安装:

1
docker --version

在这里插入图片描述

RocketMQ部署

拉取镜像

1
2
3
4
5
# 拉取nameserver镜像
docker pull apache/rocketmq:4.9.4

# 拉取控制台镜像
docker pull apacherocketmq/rocketmq-dashboard:latest

在这里插入图片描述
第二个之前拉过了,步骤和上面一样的

报错

Error response from daemon: Get “https://registry-1.docker.io/v2/“: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

翻译:错误响应来自守护程序:在等待连接时取消请求”https://registry-1.docker.io/v2/":net/http:在等待标头时超过客户端超时

更改源可以解决报错问题
站内参考 我的文章 Docker Desktop 配置国内镜像源教程

创建挂载目录

在本地创建以下目录用于数据持久化:

1
2
3
4
5
6
mkdir rocketmq
cd rocketmq
mkdir data
mkdir data\namesrv
mkdir data\broker
mkdir conf

在d盘打开PowerShell
在这里插入图片描述

配置Broker

在conf目录下创建broker.conf文件,内容如下:

1
2
3
4
5
6
7
8
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
brokerIP1 = {your_host_ip}
参数名称 参数值 含义 作用 备注
brokerClusterName DefaultCluster 指定 Broker 所属的集群名称 在分布式消息系统中,通过集群名称区分不同的集群。 该 Broker 属于名为“DefaultCluster”的集群。
brokerName broker-a 指定 Broker 的名称 在集群中标识不同的 Broker 实例。 该 Broker 的名称为“broker-a”。
brokerId 0 指定 Broker 的 ID 在集群中区分不同的 Broker 实例。 主 Broker 的 ID 为 0,表示该 Broker 是主 Broker。
deleteWhen 04 指定删除文件的时间 设置每天删除过期文件的时间点。 每天 4 点删除过期文件。
fileReservedTime 48 指定文件保留的时间 设置文件在磁盘上保留的时长(单位:小时)。 文件在磁盘上保留 48 小时,超过该时间的文件将被删除。
brokerRole ASYNC_MASTER 指定 Broker 的角色 在主从复制模式下,定义 Broker 是主节点还是从节点。 表示该 Broker 是异步主节点,消息异步复制到从节点。
flushDiskType ASYNC_FLUSH 指定磁盘刷新类型 设置消息写入磁盘的方式。 采用异步刷新磁盘的方式,消息先写入内存,再异步刷新到磁盘,性能较高。
brokerIP1 {your_host_ip} 指定 Broker 的 IP 地址 设置 Broker 所在服务器的 IP 地址。 默认可能绑定到 127.0.0.1(仅限本机访问),需替换为实际服务器 IP 地址。

启动NameServer

1
2
3
4
5
6
docker run -d --name rmqnamesrv \
-p 9876:9876 \
-v {your_path}/data/namesrv/logs: /home/rocketmq/logs \
-v {your_path}/data/namesrv/store: /home/rocketmq/store \
--memory "512m" \
apache/rocketmq:4.9.4 sh mqnamesrv

在 Docker 命令中,{your_path}你本地宿主机的自定义目录路径,用于将 RocketMQ 的日志和存储数据持久化到宿主机(而非容器内部)。你需要根据操作系统和实际需求替换成具体的路径。
windows 下

– 在 PowerShell 中并不是一个标准的参数前缀,因此解析器会将其误解为一元运算符。上面代码会报错

在rocketmq创建一个startNameServer.bat

1
docker run -d --name rmqnamesrv -p 9876:9876 -v d:/rocketmq/data/namesrv/logs:/home/rocketmq/logs -v d:/rocketmq/data/namesrv/store:/home/rocketmq/store --memory "512m" apache/rocketmq:4.9.4 sh mqnamesrv

保存通过PowerShell运行

1
./startNameServer

在这里插入图片描述


参数说明

参数 含义 作用
docker run 运行容器 命令用于启动一个新的容器。
-d 后台运行 表示容器在后台运行,不占用当前终端。
--name rmqnamesrv 指定容器名称 将容器命名为“rmqnamesrv”,便于管理和识别。
-p 9876:9876 端口映射 将宿主机的 9876 端口映射到容器的 9876 端口,使外部可以通过该端口访问容器内的服务。
-v {your_path}/data/namesrv/logs:/home/rocketmq/logs 挂载日志目录 将宿主机的指定路径挂载到容器内的 /home/rocketmq/logs 目录,用于存储日志文件。
-v {your_path}/data/namesrv/store:/home/rocketmq/store 挂载存储目录 将宿主机的指定路径挂载到容器内的 /home/rocketmq/store 目录,用于存储相关数据。
--memory "512m" 限制容器内存 设置容器可用内存为 512MB,防止容器占用过多内存资源。
apache/rocketmq:4.9.4 指定镜像及版本 使用 Apache RocketMQ 的 4.9.4 版本镜像来创建容器。
sh mqnamesrv 启动命令 在容器启动后执行 sh mqnamesrv 命令,用于启动 RocketMQ 的 NameServer 服务。

作用说明

  • -v {your_path}/data/namesrv/logs:/home/rocketmq/logs
    将容器内的日志目录 /home/rocketmq/logs 挂载到宿主机的 {your_path}/data/namesrv/logs 目录。
  • -v {your_path}/data/namesrv/store:/home/rocketmq/store
    将容器内的存储目录 /home/rocketmq/store 挂载到宿主机的 {your_path}/data/namesrv/store 目录。
参数 替换内容 示例路径(宿主机)
{your_path} 你本地实际的根目录路径 /home/user/rocketmq(Linux)
C:\rocketmq(Windows)
logsstore RocketMQ 的日志和持久化数据 自动关联到容器内对应目录

通过指定 {your_path},你可以确保 RocketMQ 的数据不会因容器删除而丢失。

启动Broker

1
2
3
4
5
6
7
8
docker run -d --name rmqbroker \
-p 10911:10911 -p 10909:10909 \
-v {your_path}/data/broker/logs:/home/rocketmq/logs \
-v {your_path}/data/broker/store:/home/rocketmq/store \
-v {your_path}/conf/broker.conf:/home/rocketmq/broker.conf \
--memory 1g \
--link rmqnamesrv:namesrv \
apache/rocketmq:4.9.4 sh mqbroker -c /conf/broker.conf

同上
window下创建startBroker并运行

1
docker run -d --name rmqbroker -p 10911:10911 -p 10909:10909 -v d:/rocketmq/data/broker/logs:/home/rocketmq/logs -v d:/rocketmq/data/broker/store:/home/rocketmq/store -v d:/rocketmq/conf/broker.conf:/home/rocketmq/broker.conf --memory 1g --link rmqnamesrv:namesrv apache/rocketmq:4.9.4 sh mqbroker -c /home/rocketmq/broker.conf

注意:在Windows环境下,Docker挂载路径必须使用绝对路径,且使用正斜杠(/)而不是反斜杠()。请确保d:/rocketmq目录下已经创建了相应的文件夹结构。
在这里插入图片描述

参数说明

参数 含义 作用
docker run 运行容器 命令用于启动一个新的容器。
-d 后台运行 表示容器在后台运行,不占用当前终端。
--name rmqbroker 指定容器名称 将容器命名为“rmqbroker”,便于管理和识别。
-p 10911:10911 -p 10909:10909 端口映射 将宿主机的 10911 和 10909 端口分别映射到容器的对应端口,使外部可以通过这些端口访问容器内的服务。
-v {your_path}/data/broker/logs:/home/rocketmq/logs 挂载日志目录 将宿主机的指定路径挂载到容器内的 /home/rocketmq/logs 目录,用于存储日志文件。
-v {your_path}/data/broker/store:/home/rocketmq/store 挂载存储目录 将宿主机的指定路径挂载到容器内的 /home/rocketmq/store 目录,用于存储相关数据。
-v {your_path}/conf/broker.conf:/home/rocketmq/broker.conf 挂载配置文件 将宿主机的指定配置文件挂载到容器内的 /home/rocketmq/broker.conf 路径,用于自定义 Broker 的配置。
--memory 1g 限制容器内存 设置容器可用内存为 1GB,防止容器占用过多内存资源。
--link rmqnamesrv:namesrv 容器间链接 将当前容器与名为“rmqnamesrv”的容器链接,并将“namesrv”作为别名解析到目标容器。
apache/rocketmq:4.9.4 指定镜像及版本 使用 Apache RocketMQ 的 4.9.4 版本镜像来创建容器。
sh mqbroker -c /conf/broker.conf 启动命令 在容器启动后执行 sh mqbroker -c /conf/broker.conf 命令,用于启动 RocketMQ 的 Broker 服务,并指定配置文件路径。

启动管理控制台

1
2
3
4
5
docker run -d --name rmqdashboard \
-p 8080:8080 \
-e "JAVA_OPTS=-Drocketmq.namesrv.addr=rmqnamesrv:9876" \
--link rmqnamesrv:rmqnamesrv \
apacherocketmq/rocketmq-dashboard:latest

windows下创建 startrmqdashboard.bat

1
docker run -d --name rmqdashboard -p 8080:8080 -e "JAVA_OPTS=-Drocketmq.namesrv.addr=rmqnamesrv:9876"  --link rmqnamesrv:rmqnamesrv  apacherocketmq/rocketmq-dashboard:latest

在这里插入图片描述

参数说明

参数 含义 作用
docker run 运行容器 命令用于启动一个新的容器。
-d 后台运行 表示容器在后台运行,不占用当前终端。
--name rmqdashboard 指定容器名称 将容器命名为“rmqdashboard”,便于管理和识别。
-p 8080:8080 端口映射 将宿主机的 8080 端口映射到容器的 8080 端口,使外部可以通过该端口访问容器内的服务。
-e "JAVA_OPTS=-Drocketmq.namesrv.addr=rmqnamesrv:9876" 设置环境变量 设置 Java 应用的环境变量,指定 RocketMQ NameServer 的地址为 rmqnamesrv:9876
--link rmqnamesrv:rmqnamesrv 容器间链接 将当前容器与名为“rmqnamesrv”的容器链接,并将“rmqnamesrv”作为别名解析到目标容器。
apacherocketmq/rocketmq-dashboard:latest 指定镜像及版本 使用 Apache RocketMQ Dashboard 的最新版本镜像来创建容器。

验证部署

访问控制台:http://localhost:8080
查看集群信息和broker状态
使用控制台发送测试消息

在这里插入图片描述

常见问题解决

问题 解决办法
内存不足 适当调整容器内存限制,修改JVM参数
连接超时 检查端口映射,确认防火墙设置,验证broker.conf中的IP配置
数据持久化 确保挂载目录权限正确,定期清理日志文件
性能优化建议 合理配置系统参数:调整commitLog大小,优化刷盘策略;监控指标:消息堆积、磁盘使用率、TPS/延迟

参考资料

RocketMQ官方文档
Docker官方文档