首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >系统越做越大后,我才明白为什么大厂都离不开RocketMQ

系统越做越大后,我才明白为什么大厂都离不开RocketMQ

作者头像
fruge365
发布2026-06-16 17:46:50
发布2026-06-16 17:46:50
1270
举报

前言

刚接触消息队列的时候,我一直觉得它离自己很远。

毕竟大多数小项目里,一个接口调另一个接口,数据库直接读写,功能照样能跑。直到有一天,系统访问量慢慢上来,各种问题开始集中爆发:订单创建变慢、短信发送超时、日志写入拖垮接口,甚至一个下游服务出问题,整个业务链路都跟着受影响。

那时候我才发现,很多系统性能问题其实并不是服务器不够强,而是服务之间耦合得太紧。

本来用户下单只需要写数据库,却还要同步发送短信、同步更新库存、同步记录日志、同步推送通知。任何一个环节变慢,整个请求都会跟着变慢。而消息队列解决的,恰恰就是这种问题。

后来在学习消息中间件时,我选择了 RocketMQ。作为 Apache 顶级项目,它不仅支撑过大规模业务场景,还具备高吞吐、高可靠和分布式扩展能力。很多互联网公司在订单、支付、库存和异步任务场景中都能看到它的身影。

而相比直接使用 Docker 镜像,我更希望真正理解 RocketMQ 的运行机制。所以这次选择从 Linux 原生部署开始,亲手搭建 NameServer 和 Broker,把整个消息链路跑通。

在这里插入图片描述
在这里插入图片描述

1.前提条件

首先需要安装jdk

代码语言:javascript
复制
java -version
在这里插入图片描述
在这里插入图片描述

下载RocketMQ的源码包以及运行包

RocketMQ建议的运行环境需要至少12G的内存

关于RocketMQ的版本: 我们这里采用最新的5.3.4版本

在这里插入图片描述
在这里插入图片描述

这里需要小伙伴注意一下,4.x的系列版本已经停止了维护。这意味着目前已经不建议使用4.x的版本了。

2.安装RocketMQ

将下载后的文件上传到/app/rocketmq

代码语言:javascript
复制
mkdir -p rocketmq
cd rocketmq/
在这里插入图片描述
在这里插入图片描述

解压该文件:

代码语言:javascript
复制
 unzip rocketmq-all-5.3.4-bin-release.zip
在这里插入图片描述
在这里插入图片描述

修改rocketmq文件名:

代码语言:javascript
复制
mv rocketmq-all-5.3.4-bin-release/ rocketmq
在这里插入图片描述
在这里插入图片描述

3.配置RocketMQ

3.1修改runserver.sh和runbroker.sh启动脚本

修改runserver.sh脚本:

代码语言:javascript
复制
vi /app/rocketmq/rocketmq/bin/runserver.sh

将原来的参数就改为红框内参数,如果你的机器内存够大这一步可以不配置:

在这里插入图片描述
在这里插入图片描述

jdk路径必须修改为自己的jdk路径:

代码语言:javascript
复制
which java
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

修改runbroker.sh脚本:

代码语言:javascript
复制
vi /app/rocketmq/rocketmq/bin/runbroker.sh

将原来的参数就改为红框内参数,如果你的机器内存够大这一步可以不配置:

在这里插入图片描述
在这里插入图片描述

jdk路径必须修改为自己的jdk路径:

在这里插入图片描述
在这里插入图片描述
3.2新增broker.conf配置信息

编辑broker.conf配置文件:

代码语言:javascript
复制
vi /app/rocketmq/rocketmq/conf/broker.conf
namesrvAddr = localhost:9876
brokerIP1 = localhost
在这里插入图片描述
在这里插入图片描述
3.3启动关闭rocketmq

创建日志目录:

代码语言:javascript
复制
mkdir -p /data/logs/rocketmq
在这里插入图片描述
在这里插入图片描述

启动命令:

代码语言:javascript
复制
#启动namesrv服务
nohup sh /app/rocketmq/rocketmq/bin/mqnamesrv > /data/logs/rocketmq/nameserver.log &
#启动broker服务
nohup sh /app/rocketmq/rocketmq/bin/mqbroker -n localhost:9876 autoCreateTopicEnable=true > /data/logs/rocketmq/broker.log &
在这里插入图片描述
在这里插入图片描述

验证是否启动成功:

代码语言:javascript
复制
jps
在这里插入图片描述
在这里插入图片描述

关闭命令:

代码语言:javascript
复制
#关闭namesrv服务
/app/rocketmq/rocketmq/bin/mqshutdown namesrv
#关闭broker服务
/app/rocketmq/rocketmq/bin/mqshutdown broker
在这里插入图片描述
在这里插入图片描述

4.配置开机自启动

编写namesrv服务:

代码语言:javascript
复制
#创建配置文件
vi /etc/systemd/system/rocketmqnamesrv.service
#添加如下内容
[Unit]
Description=rocketmq - nameserver
Documentation=rocketmq_nameserver
After=network.target

[Service]
Type=sample
User=root
ExecStart=/app/rocketmq/rocketmq/bin/mqnamesrv
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
Restart=0
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target

编写broker服务:

代码语言:javascript
复制
#创建配置文件
vi /etc/systemd/system/rocketmqbroker.service
#添加如下内容
[Unit]
Description=rocketmq - broker
Documentation=rocketmq_broker
After=network.target

[Service]
Type=sample
User=root
ExecStart=/app/rocketmq/rocketmq/bin/mqbroker -n localhost:9876 /app/rocketmq/rocketmq/conf/broker.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
Restart=0
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target

此时rocketmq是关闭状态,使用systemctl 方式启动测试:

代码语言:javascript
复制
#依次执行启动namesrv
systemctl daemon-reload
systemctl enable rocketmqnamesrv.service
systemctl start rocketmqnamesrv.service
systemctl status rocketmqnamesrv.service
#依次执行启动broker
systemctl daemon-reload
systemctl enable rocketmqbroker.service
systemctl start rocketmqbroker.service
systemctl status rocketmqbroker.service

你已在内网Linux服务器上部署了Apache RocketMQ,执行mqnamesrv和mqbroker成功启动了消息服务。但默认情况下,这些服务仅监听本地或局域网,外网客户端无法连接——即使你只是想从公司网络外发送一条测试消息,也会因网络隔离而失败。

此时,无需申请公网IP或配置复杂端口映射,只需借助cpolar内网穿透工具,将RocketMQ的关键端口安全暴露到公网。一旦隧道建立,任何外网设备都能像在内网一样,直接连接并使用你刚刚启动的RocketMQ服务。

5.安装cpolar内网穿透工具

cpolar 可以将你本地电脑中的服务(如 SSH、Web、数据库)映射到公网。即使你在家里或外出时,也可以通过公网地址连接回本地运行的开发环境。

❤️以下是安装cpolar步骤:

使用一键脚本安装命令:

代码语言:javascript
复制
sudo curl https://get.cpolar.sh | sh
在这里插入图片描述
在这里插入图片描述

安装完成后,执行下方命令查看cpolar服务状态:(如图所示即为正常启动)

代码语言:javascript
复制
sudo systemctl status cpolar
在这里插入图片描述
在这里插入图片描述

Cpolar安装和成功启动服务后,在浏览器上输入虚拟机主机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是随机分配的公网端口号
在这里插入图片描述
在这里插入图片描述

现在我们用另一台虚拟机启动一下我们的rocketmq:

代码语言:javascript
复制
nohup sh /app/rocketmq/rocketmq/bin/mqbroker -n 2.tcp.cpolar.top:11242 autoCreateTopicEnable=true > /data/logs/rocketmq/broker.log &

如图可见 启动成功:

在这里插入图片描述
在这里插入图片描述

7.保留固定TCP公网地址

使用cpolar为其配置TCP地址,该地址为固定地址,不会随机变化。

在这里插入图片描述
在这里插入图片描述

选择区域和描述:有一个下拉菜单,当前选择的是“China Top”。 右侧输入框,用于填写描述信息。 保留按钮:在右侧有一个橙色的“保留”按钮,点击该按钮可以保留所选的TCP地址。 列表中显示了一条已保留的TCP地址记录。

在这里插入图片描述
在这里插入图片描述

登录cpolar web UI管理界面,点击左侧仪表盘的隧道管理——隧道列表,找到所要配置的隧道rocketmq,点击右侧的编辑

在这里插入图片描述
在这里插入图片描述

修改隧道信息,将保留成功的TCP端口配置到隧道中。

  • 端口类型:选择固定TCP端口
  • 预留的TCP地址:填写保留成功的TCP地址

点击更新

在这里插入图片描述
在这里插入图片描述

创建完成后,打开在线隧道列表,此时可以看到随机的公网地址已经发生变化,地址名称也变成了保留和固定的TCP地址。

在这里插入图片描述
在这里插入图片描述

这样我们的地址就永远不会发生变化啦!

总结

体验下来,RocketMQ 最大的价值并不是提升性能,而是提升系统的容错能力。

很多开发者第一次接触消息队列时,关注的往往是高并发。但真正进入生产环境之后你会发现,更重要的是解耦。原本互相依赖的系统,通过消息队列连接之后,即使某个服务短暂异常,也不会立即影响整个业务流程。

尤其是在订单、支付、库存同步、消息通知等场景下,RocketMQ 的异步处理能力能够明显降低系统压力。当流量突然上涨时,它还能承担削峰填谷的作用,避免请求直接冲垮后端服务。

而通过本文的部署实践,从 NameServer、Broker 到服务启动和远程访问配置,已经能够搭建起一个完整可运行的 RocketMQ 环境。后续无论是接入 Spring Boot、扩展集群架构,还是引入监控体系,都有了继续演进的基础。

再结合 cpolar 提供的公网 TCP 地址能力后,即使 RocketMQ 部署在内网环境中,也能够实现跨网络访问和远程测试,大幅降低开发和验证成本。

很多人学习 RocketMQ,是因为面试会问。

但真正把它部署起来之后你会发现:

消息队列最大的意义,从来不是让系统跑得更快。

而是让系统在复杂业务场景下,依然能够稳稳地跑下去。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-06-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 1.前提条件
  • 2.安装RocketMQ
  • 3.配置RocketMQ
    • 3.1修改runserver.sh和runbroker.sh启动脚本
    • 3.2新增broker.conf配置信息
    • 3.3启动关闭rocketmq
  • 4.配置开机自启动
  • 5.安装cpolar内网穿透工具
  • 6.配置公网地址
  • 7.保留固定TCP公网地址
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档