Windows11环境下使用Alibaba RocketMQ项目版本与运行环境获取资源调整配置信息broker.conf 文件namesrvAddrstorePathRootDirbin 目录下各个启动项配置信息电脑中的系统变量配置启动 RocketMQ测试发送消息和消费消息发送消息消费消息关闭 RocketMQ原理结尾项目版本与运行环境JDK版本17操作系统Windows11RocketMQ4.9.5获取资源前往 RocketMQ 的官网下载资源链接: Apache RocketMQ 官网进入官网后点击右上角的下载标签进入版本选择页面。选择自己需要的版本博主选择的版本是 4.9.5点击Binary下载列下的压缩包链接进行下载。Source下载列下的是 RocketMQ 源代码。需要学习 RocketMQ 源码的可以点击此列下的链接进行下载源码。下载完毕后解压压缩包得到以下文件store 文件夹是博主在配置文件中写了配置信息执行后所生成的文件夹原生文件夹里初始是没有 store 文件夹的。调整配置信息broker.conf 文件进入conf 文件夹找到broker.conf 文件选择用记事本或 VS Code 打开。在配置文件中加入以下两条内容# NameServer地址 namesrvAddr localhost:9876 # 存储根路径 storePathRootDir 自己 RocketMQ 根目录/storeKEYVALUE作用namesrvAddrlocalhost:9876指定客户端Producer / Consumer或 Broker 连接的 NameServer 地址列表storePathRootDir自己 RocketMQ 根目录/store指定 Broker 存储所有持久化数据的根目录namesrvAddr首先我们得明白为什么需要 NameServer namesrvAddr 的核心作用使用方作用Producer / Consumer告诉客户端“去哪找 NameServer 获取 Topic 路由”Broker告诉 Broker“启动后向哪些 NameServer 注册自己”没有正确的 namesrvAddr整个 RocketMQ 集群就无法协同工作。namesrvAddr 的配置格式# 单个 NameServer namesrvAddr192.168.1.100:9876 # 多个 NameServer集群模式用分号隔开 namesrvAddr192.168.1.100:9876;192.168.1.101:9876;192.168.1.102:9876注意分号;分隔不是逗号storePathRootDirstorePathRootDir 定义了以下核心数据的存储根路径数据类型说明CommitLog所有消息的物理存储文件顺序写入高性能ConsumeQueue每个 Topic-Queue 的消费索引逻辑队列IndexFile消息索引用于按 Key 或时间范围查询Checkpoint 文件存储刷盘、HA 等状态的检查点信息Abort 文件标记 Broker 是否异常退出Config 目录保存运行时的配置快照如 topic.json、subscriptionGroup.json默认情况下这些数据会存放在${ROCKETMQ_HOME}/store/而 storePathRootDir 允许你将整个 store 目录重定向到其他磁盘或分区。bin 目录下各个启动项配置信息需要在以下文件中添加内容mqshutdown.cmdrunbroker.cmdrunservier.cmdtools.cmd需要添加的内容setJAVA_HOMEJDK8的根目录setPATH%JAVA_HOME%\bin;%PATH%RocketMQ 目前在5.x以下的版本仅支持使用JDK8进行启动因为 RocketMQ 中各个 cmd 启动文件中有使用到JDK8 才能拥有的 GC垃圾回收器而超过 JDK8 以上的版本当中有部分 GC垃圾回收器已被弃用或移除所以无法使用超过 JDK8 以上版本的 JDK 来启动 RocketMQ。但博主项目中需要使用 JDK17 进行编写项目电脑当中的 JAVA_HOME 环境变量当中配置的是 JDK17。所以需要在这些 cmd 文件中进行手动配置 JAVA_HOME 和 PATH 环境变量。电脑中的系统变量配置添加变量名为ROCKETMQ_HOME的系统变量变量值为你的 RocketMQ 所在根目录。2.添加变量名为NAMESRV_ADDR的系统变量变量值为localhost:9876。此值不可随意更改为固定写法。为什么需要添加这个变量呢原因RocketMQ 客户端生产者、消费者必须知道 NameServer 的地址 才能获取 Topic 的路由信息哪些 Broker 存储该 Topic向正确的 Broker 发送或拉取消息。如果没有配置就会报错connect to null failed。原因为在play.cmd中脚本已给定了broker的名称为localhost:9876且在broker.conf文件中我们也写死了namesrvAddr localhost:9876启动 RocketMQ当以上所有配置完毕之后即可在命令行里调用 cmd 文件进行启动 RocketMQ。博主使用的是 PowerShell 进行启动也可在资源导航栏中使用 cmd 来启动命令行进行启动 RocketMQ输入以下命令.\play.cmd当输出Start Name Server and Broker Successfully.时代表broker和Name Server启动成功。测试发送消息和消费消息发送消息这里使用官方提供的RocketMQ 源码中自带的一个快速入门示例生产者。.\tools.cmd org.apache.rocketmq.example.quickstart.Producer当出现SendResult [sendStatusSEND_OK, msgId ...时代表消息发送成功。消费消息这里使用官方提供的RocketMQ 源码中自带的一个快速入门示例消费者。.\tools.cmd org.apache.rocketmq.example.quickstart.Consumer当出现ConsumeMessageThread_%d Receive New Messages: [MessageExt...时代表消息消费成功。关闭 RocketMQ使用下面两条命令即可关闭 RocketMQ 。.\mqshutdown.cmd namesrv .\mqshutdown.cmd broker在此给个小建议。先关闭namesrv再关闭broker。如果先关闭broker的话有概率引起命令行窗口异常。原理通过观察mqshutdown.cmd文件里的脚本语句可知脚本会自动帮我们关闭 broker 和 name server 。/l代表接收一个参数。当前输入参数固定值为broker和namesrv结尾书写此文是因为查询 RocketMQ 官网后发现官网对于有关Windows环境下的没有或使用教程比较模糊在官网教程中前半部分有Windows环境下的相关命令但到后续就变为只有Linux和MacOS以及Unix环境下的命令同时官方在官网中说明启用 RocketMQ 可使用 JDK8 或以上的版本但经测试使用 JDK8 以上版本都不可以启动 RocketMQ 只有使用 JDK8 才可启动所以书写此文以此补充。若当中有错误还请私信指点或评论指点。