RocketMQ中间件 Windows环境Docker部署详解

0 阅读6分钟

前言

在分布式系统中,消息队列是解耦服务、实现异步通信的核心组件。**RocketMQ**作为阿里巴巴开源的高性能分布式消息中间件,凭借其高吞吐、低延迟和高可靠性,广泛应用于金融、电商、物联网等领域。

然而,传统的本地环境部署RocketMQ需要复杂的配置和依赖管理。借助**Docker**容器化技术,开发者可以快速在Windows系统上搭建RocketMQ环境,省去繁琐的依赖安装步骤,专注于业务逻辑开发。本文将从环境准备、镜像部署、配置验证到控制台集成,手把手带你完成RocketMQ的完整部署流程。

微信图片_20250413153258

一、环境要求

  1. 系统版本:Windows 10/11(需启用WSL2Hyper-V
  2. Docker Desktop:≥4.15.0(设置中勾选“Use WSL2”)(安装步骤可参考之前文章:blog.csdn.net/qq_17153885…
  3. 硬件配置:双核CPU/8GB内存/50GB磁盘空间
  4. 端口开放: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的更多应用场景,助力您的项目高效运行。