踩完几个坑才搭好的RocketMQ,给你说说我的过程
搭 RocketMQ 这件事说难不难但说简单也不算简单。我自己第一次在 Linux 上部署的时候遇到过几个典型的问题内存参数没调好NameServer 起不来端口占用不知道怎么看Broker 和 NameServer 的启动顺序搞反了……查一圈文档才能把服务跑起来折腾完发现连发消息都不会测。如果你也打算在 Linux 上原生部署 RocketMQ不用 Docker不依赖复杂编排这篇文章就是把我踩过的坑过一遍帮你绕过去。核心步骤就几件事装好 JDK、解压二进制包、配置 NameServer 和 Broker、调一下 JVM 参数、启动服务。配好之后有个简单的生产者/消费者测试脚本验证消息能正常收发。整个过程适合跑在centOS 上机器内存最好留 12G 以上官方建议测试环境或者轻量级生产场景够用了。版本方面现在主流是 5.x4.x 已经停止维护不建议再用了。本文详细介绍了在Linux系统中从零开始原生部署Apache RocketMQ的完整流程。通过下载官方二进制包、配置NameServer与Broker核心组件、调整JVM与存储参数读者可快速搭建起一个单机可用的RocketMQ消息中间件环境。文章还涵盖了服务启动顺序、关键日志查看、生产者/消费者简易测试验证以及常见问题排查如端口占用、内存不足等确保部署过程顺畅可靠。整个方案无需Docker或复杂依赖适合开发测试、学习原理或轻量级生产场景。通过本次实践开发者不仅能掌握RocketMQ的基础架构也为后续扩展集群、集成Spring Boot应用或对接监控系统打下坚实基础。消息队列不再遥远——在Linux上RocketMQ一跑就通。1.前提条件首先需要安装jdkjava-version下载RocketMQ的源码包以及运行包RocketMQ建议的运行环境需要至少12G的内存。关于RocketMQ的版本 我们这里采用最新的5.3.4版本这里需要小伙伴注意一下4.x的系列版本已经停止了维护。这意味着目前已经不建议使用4.x的版本了。2.安装RocketMQ将下载后的文件上传到/app/rocketmqmkdir-procketmqcdrocketmq/解压该文件unziprocketmq-all-5.3.4-bin-release.zip修改rocketmq文件名mvrocketmq-all-5.3.4-bin-release/ rocketmq3.配置RocketMQ3.1修改runserver.sh和runbroker.sh启动脚本修改runserver.sh脚本vi/app/rocketmq/rocketmq/bin/runserver.sh将原来的参数就改为红框内参数如果你的机器内存够大这一步可以不配置jdk路径必须修改为自己的jdk路径whichjava修改runbroker.sh脚本vi/app/rocketmq/rocketmq/bin/runbroker.sh将原来的参数就改为红框内参数如果你的机器内存够大这一步可以不配置jdk路径必须修改为自己的jdk路径3.2新增broker.conf配置信息编辑broker.conf配置文件vi/app/rocketmq/rocketmq/conf/broker.conf namesrvAddrlocalhost:9876 brokerIP1localhost3.3启动关闭rocketmq创建日志目录mkdir-p/data/logs/rocketmq启动命令#启动namesrv服务nohupsh/app/rocketmq/rocketmq/bin/mqnamesrv/data/logs/rocketmq/nameserver.log#启动broker服务nohupsh/app/rocketmq/rocketmq/bin/mqbroker-nlocalhost:9876autoCreateTopicEnabletrue/data/logs/rocketmq/broker.log验证是否启动成功jps关闭命令:#关闭namesrv服务/app/rocketmq/rocketmq/bin/mqshutdown namesrv#关闭broker服务/app/rocketmq/rocketmq/bin/mqshutdown broker4.配置开机自启动编写namesrv服务#创建配置文件vi/etc/systemd/system/rocketmqnamesrv.service#添加如下内容[Unit]Descriptionrocketmq - nameserverDocumentationrocketmq_nameserverAfternetwork.target[Service]TypesampleUserrootExecStart/app/rocketmq/rocketmq/bin/mqnamesrvExecReload/bin/kill-sHUP$MAINPIDExecStop/bin/kill-sQUIT$MAINPIDRestart0LimitNOFILE65535[Install]WantedBymulti-user.target编写broker服务#创建配置文件vi/etc/systemd/system/rocketmqbroker.service#添加如下内容[Unit]Descriptionrocketmq - brokerDocumentationrocketmq_brokerAfternetwork.target[Service]TypesampleUserrootExecStart/app/rocketmq/rocketmq/bin/mqbroker-nlocalhost:9876 /app/rocketmq/rocketmq/conf/broker.confExecReload/bin/kill-sHUP$MAINPIDExecStop/bin/kill-sQUIT$MAINPIDRestart0LimitNOFILE65535[Install]WantedBymulti-user.target此时rocketmq是关闭状态使用systemctl 方式启动测试:#依次执行启动namesrvsystemctl daemon-reload systemctlenablerocketmqnamesrv.service systemctl start rocketmqnamesrv.service systemctl status rocketmqnamesrv.service#依次执行启动brokersystemctl daemon-reload systemctlenablerocketmqbroker.service systemctl start rocketmqbroker.service systemctl status rocketmqbroker.service你已在内网Linux服务器上部署了Apache RocketMQ执行mqnamesrv和mqbroker成功启动了消息服务。但默认情况下这些服务仅监听本地或局域网外网客户端无法连接——即使你只是想从公司网络外发送一条测试消息也会因网络隔离而失败。此时无需申请公网IP或配置复杂端口映射只需借助cpolar内网穿透工具将RocketMQ的关键端口安全暴露到公网。一旦隧道建立任何外网设备都能像在内网一样直接连接并使用你刚刚启动的RocketMQ服务。5.安装cpolar内网穿透工具cpolar 可以将你本地电脑中的服务如 SSH、Web、数据库映射到公网。即使你在家里或外出时也可以通过公网地址连接回本地运行的开发环境。❤️以下是安装cpolar步骤使用一键脚本安装命令sudocurlhttps://get.cpolar.sh|sh安装完成后执行下方命令查看cpolar服务状态如图所示即为正常启动sudosystemctl status cpolarCpolar安装和成功启动服务后在浏览器上输入虚拟机主机IP加9200端口即:【ip:9200】访问Cpolar管理界面使用Cpolar官网注册的账号登录,登录后即可看到cpolar web 配置界面,接下来在web 界面配置即可打开浏览器访问本地9200端口使用cpolar账户密码登录即可,登录后即可对隧道进行管理。6.配置公网地址通过配置你可以在本地 WSL 或 Linux 系统上运行 SSH 服务并通过 Cpolar 将其映射到公网从而实现从任意设备远程连接开发环境的目的。隧道名称可自定义本例使用了:rocketmq注意不要与已有的隧道名称重复协议tcp本地地址9876端口类型随机临时TCP端口地区China Top创建成功后打开左侧在线隧道列表,可以看到刚刚通过创建隧道生成了公网地址接下来就可以在其他电脑或者移动端设备异地上使用任意一个地址在终端中访问即可。tcp 表示使用的协议类型2.tcp.cpolar.top是 Cpolar 提供的域名11242是随机分配的公网端口号现在我们用另一台虚拟机启动一下我们的rocketmqnohupsh/app/rocketmq/rocketmq/bin/mqbroker-n2.tcp.cpolar.top:11242autoCreateTopicEnabletrue/data/logs/rocketmq/broker.log如图可见 启动成功7.保留固定TCP公网地址使用cpolar为其配置TCP地址该地址为固定地址不会随机变化。选择区域和描述有一个下拉菜单当前选择的是“China Top”。右侧输入框用于填写描述信息。保留按钮在右侧有一个橙色的“保留”按钮点击该按钮可以保留所选的TCP地址。列表中显示了一条已保留的TCP地址记录。登录cpolar web UI管理界面点击左侧仪表盘的隧道管理——隧道列表找到所要配置的隧道rocketmq点击右侧的编辑。修改隧道信息将保留成功的TCP端口配置到隧道中。端口类型选择固定TCP端口预留的TCP地址填写保留成功的TCP地址点击更新。创建完成后打开在线隧道列表此时可以看到随机的公网地址已经发生变化地址名称也变成了保留和固定的TCP地址。这样我们的地址就永远不会发生变化啦总结回过头看RocketMQ 在 Linux 上的原生部署不算复杂关键点就几个JDK 环境要提前装好、runserver.sh 和 runbroker.sh 里的内存参数根据实际情况调整、启动顺序一定是 NameServer 先跑起来再启动 Broker。配好之后的服务可以通过 systemctl 做开机自启管理起来方便很多。消息收发验证也不难官方的测试脚本足够判断服务是否正常运行。如果还有公网访问的需求配合 Cpolar 把 NameServer 和 Broker 端口映射出去异地也能连上这套消息队列。固定 TCP 地址配好之后连接地址长期有效不用每次重启都要换配置。整体来说搭起来之后这套环境用于开发测试、学习消息队列原理或者跑轻量级的生产场景都够用。