Apache RocketMQ:定义与核心作用
一、定义
Apache RocketMQ 是由阿里巴巴开源、后捐赠给 Apache 基金会的分布式消息队列(Message Queue) 中间件,是一款高性能、高可靠、可扩展的异步消息传递与事件驱动系统,用于在分布式系统中实现解耦、异步、削峰填谷等核心能力。
二、核心作用(解决什么问题)
RocketMQ 主要解决分布式架构下的三大核心问题:
1. 系统解耦(Decoupling)
◦ 生产者(Producer)与消费者(Consumer)不直接依赖,通过消息中间件间接通信;
◦ 一方故障不影响另一方,系统扩展性与稳定性大幅提升。
2. 异步处理(Asynchronous)
◦ 非核心流程(如日志、通知、统计)异步执行,不阻塞主流程;
◦ 提升接口响应速度,改善用户体验。
3. 削峰填谷(Peak Shaving)
◦ 流量突增时,消息先存入队列,消费者按自身能力消费;
◦ 保护后端服务不被瞬间高流量压垮。
三、核心功能特性
• 高性能:单机吞吐量可达 10 万 + TPS,低延迟(毫秒级)。
• 高可靠:消息持久化、多副本、重试机制、死信队列,确保消息不丢失、不重复。
• 高可用:主从架构、自动故障转移、集群部署,支持 7×24 小时运行。
• 可扩展:水平扩展 Broker 集群,支持百万级 Topic、亿级消息堆积。
• 丰富特性:顺序消息、事务消息、定时 / 延迟消息、批量消息、消息过滤、轨迹追踪等。
四、典型应用场景
• 电商订单:下单后异步通知、库存扣减、物流推送、积分发放。
• 金融交易:支付结果异步通知、风控异步计算、对账异步处理。
• 日志收集:服务日志异步上报、集中存储与分析。
• 大数据流:实时数据采集、流式计算(Flink/Spark)数据源。
• 微服务通信:服务间异步解耦、事件驱动架构(EDA)。
五、核心角色(架构)
• Producer:消息生产者,发送消息到 Broker。
• Consumer:消息消费者,从 Broker 拉取 / 推送消息。
• Broker:消息存储与转发节点,负责消息持久化、路由、高可用。
• NameServer:注册中心,管理 Broker 集群、提供路由发现。

简单一句话总结:RocketMQ 是分布式系统的 “消息总线”,让服务之间异步、解耦、稳定通信,扛住高并发、保证消息可靠

下面是具体部署操作步骤

首先点击下面链接下载需要的版本,这里我用到的是4.6.0版本

Blog | RocketMQhttps://rocketmq.apache.org/release-notes/

一般情况下,我们可以直接使用 Binary 版本,它是 RocketMQ 已经编译好,可以直接使用的 RocketMQ 软件包。

这里,想编译一次 RocketMQ 源码,所以使用 Source 版本。

提醒:本文有报错经历,请先看完全文再进行配置学习,在内存配置那一块。

1.下载完成后进行解压操作

2.打开 CMD,进入源码目录

注意一定要进入先进入到包含 pom.xml 的根目录,不然后续执行编译命令就会出现我这种情况

3.执行编译命令(跳过测试)

mvn -Prelease-all -DskipTests clean install -U

4.在源码根目录下,执行以下命令,进入编译生成的发布包目录:

cd distribution\target\rocketmq-4.6.0\rocketmq-4.6.0

5.执行 dir 命令,查看当前目录下的文件和子目录。如果看到 binconflib 等文件夹,就说明你已经成功进入了正确的目录,后续的启动脚本都在这个目录的 bin 文件夹下。

6.配置环境变量

  • 打开环境变量设置界面

    • 右键点击桌面「此电脑」→ 选择「属性」;
    • 点击右侧「高级系统设置」→ 在弹出的「系统属性」窗口中选择「高级」标签 → 点击「环境变量」。
  • 新建系统级 ROCKETMQ_HOME 变量

    • 在「系统变量」区域点击「新建」;
    • 「变量名」输入:ROCKETMQ_HOME
    • 「变量值」输入:你找到的 RocketMQ 发布包目录(例如 C:\Users\86176\Downloads\rocketmq-all-4.6.0-source-release\rocketmq-all-4.6.0-source-release\distribution\target\rocketmq-4.6.0\rocketmq-4.6.0);
    • 点击「确定」保存。
  • 添加 Path 变量(可选,方便全局执行命令)

    • 在「系统变量」中找到 Path 变量,双击打开;
    • 点击「新建」→ 输入:%ROCKETMQ_HOME%\bin
    • 连续点击「确定」关闭所有窗口,环境变量立即生效。

  • 验证环境变量

  • 按下 Win+R 输入 cmd 打开命令提示符,执行:

    echo %ROCKETMQ_HOME%

    如果输出你配置的发布包路径,说明环境变量配置成功。

  • 7.启动 NameServer 和 Broker(核心步骤)

  • 关键提醒:必须打开两个独立的 CMD 窗口,分别启动 NameServer 和 Broker,关闭窗口即停止服务。

  • 步骤 1:先调整内存配置(避免启动报错)这个内存配置不正确导致后续报错

  • Windows 本地机器内存通常不足 RocketMQ 默认配置,需先修改启动脚本:
    1. 进入 %ROCKETMQ_HOME%\bin 目录(即发布包的 bin 文件夹);
    2. 找到 runserver.cmd 文件,右键「编辑」(用记事本 / Notepad++ 打开);
    3. 找到以下行(通常在文件开头):

    set "JAVA_OPT=%JAVA_OPT% -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"


    修改为低内存配置(根据你的电脑内存调整,我的电脑配置(16GB 内存,AMD Ryzen 7 5800H)):

    set "JAVA_OPT=%JAVA_OPT% -server -Xms1g -Xmx1g -Xmn512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"


    4. 同理,打开 runbroker.cmd 文件,找到相同的内存配置行,修改为:

    set "JAVA_OPT=%JAVA_OPT% -server -Xms2g -Xmx2g"


    5. 保存两个文件,关闭编辑器。
    步骤 2:启动 NameServer
    1. 打开第一个 CMD 窗口,执行命令进入 bin 目录(或直接在 bin 目录地址栏输入 cmd 打开)

    cd %ROCKETMQ_HOME%\bin

    2.执行启动命令

    start mqnamesrv.cmd

    3.此时会弹出新的控制台窗口,若看到以下日志,说明 NameServer 启动成功

    The Name Server boot success. serializeType=JSON

  • 步骤 3:启动 Broker

  • 1.打开第二个 CMD 窗口,同样进入 bin 目录

    cd %ROCKETMQ_HOME%\bin

    2.执行启动命令(关联 NameServer + 允许自动创建 Topic)

    start mqbroker.cmd -n 127.0.0.1:9876 autoCreateTopicEnable=true

    3.弹出新窗口后,若看到以下日志,说明 Broker 启动成功

    The broker[你的机器名, 127.0.0.1:10911] boot success. serializeType=JSON and name server is 127.0.0.1:9876

快速验证服务是否正常

打开新的 CMD 窗口,执行以下命令发送测试消息

# 进入 bin 目录
cd %ROCKETMQ_HOME%\bin
# 设置 NameServer 地址
set NAMESRV_ADDR=127.0.0.1:9876
# 发送测试消息
tools.cmd org.apache.rocketmq.example.quickstart.Producer

出现报错,核心问题是 Broker 服务因磁盘 / 内存资源阈值触发保护机制而拒绝服务(CODE:14),CL/CQ/INDEX 使用率都达到 93%,这是 RocketMQ 的内置保护策略,目的是防止服务崩溃。

关闭所有控制台窗口,进入 RocketMQ 发布包的 conf 目录,编辑 broker.conf 文件(用记事本打开)

粘贴以下内容

需要将transientStorePoolEnable=true 这条删掉或者改为flase

transientStorePoolEnable 是 RocketMQ 用于锁定物理内存、避免页交换的优化功能,仅在 Linux 系统上有效。
• 在 Windows 上必须关闭此功能,否则会因找不到 mlock 函数而启动失败。
• 关闭后,Broker 依然可以正常工作,只是失去了这一项 Linux 特有的性能优化,对本地测试环境影响不大

# 集群名称
brokerClusterName = DefaultCluster
# Broker 名称
brokerName = broker-a
# Broker ID (0 表示 Master)
brokerId = 0
# NameServer 地址
namesrvAddr = 127.0.0.1:9876
# 允许自动创建 Topic
autoCreateTopicEnable = true
# 异步刷盘(测试环境推荐)
flushDiskType = ASYNC_FLUSH
# 降低资源保护阈值(核心修改)
diskMaxUsedSpaceRatio = 95
# 内存保护阈值(核心修改)
transientStorePoolEnable = true
调整 Broker 内存配置

报错提示 maybe your broker machine memory too small,说明之前修改的内存参数可能仍然不足,或者没有正确生效

修改runbroker.cmd

修改runserver.cmd

进入 RocketMQ 的 bin 目录

cd C:\Users\86176\Downloads\rocketmq-all-4.6.0-source-release\rocketmq-all-4.6.0-source-release\distribution\target\rocketmq-4.6.0\rocketmq-4.6.0\bin

然后执行命令

start mqbroker.cmd -n 127.0.0.1:9876 -c ..\conf\broker.conf

进行重新测试

tools.cmd -Drocketmq.namesrv.addr=127.0.0.1:9876 org.apache.rocketmq.example.quickstart.Producer

反复打印这种 SEND_OK 的日志,就说明消息发送成功了。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐