前言
在分布式系统中,消息队列是解耦服务、实现异步通信的核心组件。**RocketMQ**作为阿里巴巴开源的高性能分布式消息中间件,凭借其高吞吐、低延迟和高可靠性,广泛应用于金融、电商、物联网等领域。
然而,传统的本地环境部署RocketMQ需要复杂的配置和依赖管理。借助**Docker**容器化技术,开发者可以快速在Windows系统上搭建RocketMQ环境,省去繁琐的依赖安装步骤,专注于业务逻辑开发。本文将从环境准备、镜像部署、配置验证到控制台集成,手把手带你完成RocketMQ的完整部署流程。
微信图片_20250413153258
一、环境要求
- 系统版本:Windows 10/11(需启用WSL2及Hyper-V)
- Docker Desktop:≥4.15.0(设置中勾选“Use WSL2”)(安装步骤可参考之前文章:blog.csdn.net/qq_17153885…)
- 硬件配置:双核CPU/8GB内存/50GB磁盘空间
- 端口开放:9876(NameServer)、10911(Broker)、8080(控制台)
二、安装步骤
2.1 创建网络
docker network create rmq-net
image
2.2 拉取rocketmq镜像
打开终端,执行以下命令从Docker Hub拉取RocketMQ的最新镜像:
docker pull apache/rocketmq
image
image
2.3 启动NameServer容器
Namesrv(Name Server)是 RocketMQ 的名称服务,用于管理 Broker 的元数据信息,如 Broker 的地址、状态等。每个 RocketMQ 集群至少需要一个 Namesrv 实例。
1.创建数据目录
创建数据目录(可选,但推荐):为了持久化存储 Namesrv 的配置和日志数据,建议在本地创建一个数据目录。例如,在 D 盘创建一个名为 "rocketmq_data" 的目录,并在其中创建 "namesrv" 子目录:
mkdir -p D:\data\rocketmq_data\namesrv
image
image
2.运行 Namesrv 容器
运行 Namesrv 容器:执行以下命令创建并运行 Namesrv 容器:
docker run -d --name rmqnamesrv -p 9876:9876 --network rmq-net -v D:\data\rocketmq_data\namesrv:/home/rocketmq/namesrv -e "MAX_POSSIBLE_HEAP=100000000" apache/rocketmq sh mqnamesrv
命令参数说明:
-d:以守护进程模式运行容器。--name rmqnamesrv:为容器指定名称为 "rmqnamesrv"。-p 9876:9876:将容器的 9876 端口映射到主机的 9876 端口,以便外部访问 Namesrv 服务。-v D:\rocketmq_data\namesrv:/home/rocketmq/namesrv:将主机的 "D:\data\rocketmq_data\namesrv" 目录挂载到容器的 "/home/rocketmq/namesrv" 目录,实现数据持久化。-e "MAX_POSSIBLE_HEAP=100000000":设置容器中 Java 进程的最大堆内存为 100MB(根据实际需求调整,建议不要设置过大,以免占用过多系统资源)。sh mqnamesrv:在容器中执行启动 Namesrv 的命令。
docker run -d --name rmqnamesrv --network rmq-net -p 9876:9876 -v D:\data\rocketmq_data\namesrv:/home/rocketmq/namesrv -e "MAX_POSSIBLE_HEAP=100000000" apache/rocketmq sh mqnamesrv
image
image
image
2.4 启动Broker容器
Broker 是 RocketMQ 的核心组件,负责存储和处理消息。每个 Broker 实例需要向 Namesrv 注册,以便客户端能够发现和连接到 Broker。
1.创建数据目录
创建数据目录:同样,为了持久化存储 Broker 的配置、日志和消息数据,在本地创建 "broker" 子目录:
mkdir -p D:\data\rocketmq_data\broker
image
2.创建 Broker 配置文件
创建 Broker 配置文件:在 "broker" 目录中创建一个名为 "broker.conf" 的配置文件,内容如下:
brokerClusterName=DefaultCluster # 集群名称
brokerName=broker-a # Broker名称(同一集群内唯一)
brokerId=0 # Broker角色(0=主节点)
deleteWhen=04 # 文件删除时间(凌晨4点)
fileReservedTime=72 # 文件保留时间(72小时)
brokerRole=ASYNC_MASTER #Broker角色(异步主节点)
flushDiskType=ASYNC_FLUSH #刷盘策略(异步刷盘)
namesrvAddr=rmqnamesrv:9876 #NameServer地址(需可访问)
brokerIP1=172.26.144.1 # Broker对外IP(实际IP或域名)。指定 Broker 的公网 IP 地址或外部访问的 IP 地址
autoCreateTopicEnable = true # 允许自动创建Topic
clusterTopicEnable = true # 启用集群级Topic
brokerTopicEnable = true # 启用Broker级Topic
image
image
3.运行 Broker 容器
运行 Broker 容器:执行以下命令创建并运行 Broker 容器:
docker run -d --name rmqbroker -p 10911:10911 -p 10909:10909 --network rmq-net -v D:\data\rocketmq_data\broker:/home/rocketmq/broker -v D:\data\rocketmq_data\broker\broker.conf:/home/rocketmq/conf/broker.conf -e "NAMESRV_ADDR=rmqnamesrv:9876" -e "MAX_POSSIBLE_HEAP=200000000" apache/rocketmq sh mqbroker -c /home/rocketmq/conf/broker.conf
命令参数说明:
-p 10911:10911:映射 Broker 的内部通信端口(用于 Broker 与 Namesrv、Broker 与 Broker 之间的通信)到主机的 10911 端口。-p 10909:10909:映射 Broker 的客户端通信端口(用于客户端发送和接收消息)到主机的 10909 端口。-v D:\data\rocketmq_data\broker:/home/rocketmq/broker:挂载 Broker 的数据目录。-v D:\data\rocketmq_data\broker\broker.conf:/home/rocketmq/conf/broker.conf:挂载 Broker 的配置文件。-e "NAMESRV_ADDR=rmqnamesrv:9876":设置 Namesrv 的地址和端口,其中 "rmqnamesrv" 是之前创建的 Namesrv 容器的名称,Docker 会自动解析为容器的 IP 地址。-e "MAX_POSSIBLE_HEAP=200000000":设置 Broker 进程的最大堆内存为 200MB(根据实际需求调整)。sh mqbroker -c /home/rocketmq/conf/broker.conf:在容器中执行启动 Broker 的命令,并指定配置文件路径。
docker run -d --name rmqbroker --network rmq-net -p 10911:10911 -p 10909:10909 -v D:\data\rocketmq_data\broker:/home/rocketmq/broker -v D:\data\rocketmq_data\broker\broker.conf:/home/rocketmq/conf/broker.conf -e "NAMESRV_ADDR=rmqnamesrv:9876" -e "MAX_POSSIBLE_HEAP=200000000" apache/rocketmq sh mqbroker -c /home/rocketmq/conf/broker.conf
image
image
2.5 安装 RocketMQ 控制台(可选,用于可视化管理)
为了方便对 RocketMQ 集群进行可视化管理和监控,我们可以安装 RocketMQ 控制台。RocketMQ 控制台是一个基于 Web 的管理工具,提供了对 Topic、Consumer Group、Broker 等资源的管理和监控功能。
拉取RocketMqConsole镜像
docker pull apacherocketmq/rocketmq-dashboard
备注:镜像背景说明
-
apache/rocketmq-console-ng -
状态:已废弃(2021年后停止维护)
-
问题:不支持RocketMQ 5.x+,存在兼容性风险
-
来源:非Apache官方维护,社区旧版项目镜像
-
apacherocketmq/rocketmq-dashboard -
状态:官方维护(持续更新,支持最新版本)
-
功能:支持RocketMQ 4.x/5.x,集成监控告警、权限管理等新特性
-
来源:Apache RocketMQ官方GitHub仓库
image
运行Rocket-console容器
docker run -d --name rmq-console -p 8080:8080 --network rmq-net -e "JAVA_OPTS=-Drocketmq.config.namesrvAddr=rmqnamesrv:9876 -Drocketmq.config.isVIPChannel=false" -t apacherocketmq/rocketmq-dashboard
在上述命令中:
-d 是以守护进程模式在后台运行容器。--name rmq - dashboard 是给容器指定名称为rmq - dashboard。-p 8080:8080 是将容器的 8080 端口映射到宿主机的 8080 端口,这样就能通过浏览器访问控制台。
image
image
三、浏览器访问
访问控制台:浏览器打开 http://localhost:8080,若显示Broker节点状态、Topic列表,则部署成功
切换中文
image
驾驶舱
image
运维
image
Broker
image
主题
image
结束语
通过Docker在Windows环境中快速部署RocketMQ,我们体验了容器化技术带来的便捷性。RocketMQ凭借其高可靠、低延迟和灵活的分布式架构,成为企业级消息中间件的优选方案。
如果您在安装或使用过程中遇到任何问题,欢迎关注我们的公众号“技海拾贝”,获取更多技术支持和学习资源!我们期待与您共同探索RocketMQ的更多应用场景,助力您的项目高效运行。