背景与目标
在 Linux 服务器上部署 RocketMQ 后,内网测试通常顺畅,但外网访问常受网络隔离限制。本文介绍一套从基础部署到利用内网穿透工具实现公网远程连接的完整方案,无需申请公网 IP 或配置复杂端口映射。
前置环境
JDK 安装 确保服务器已安装 JDK,版本建议 1.8 或以上:
java -version
资源要求 RocketMQ 运行环境建议至少 12G 内存。本文采用最新稳定版 5.3.4(4.x 系列已停止维护)。
安装 RocketMQ
将下载的二进制包上传至 /app/rocketmq 目录并解压:
mkdir -p rocketmq && cd rocketmq/
unzip rocketmq-all-5.3.4-bin-release.zip
mv rocketmq-all-5.3.4-bin-release rocketmq
配置与启动
修改启动脚本
编辑 runserver.sh 和 runbroker.sh,根据实际机器内存调整 JVM 参数,并修正 JDK 路径:
vi /app/rocketmq/rocketmq/bin/runserver.sh
# 修改 JAVA_HOME 为实际路径
which java
同理修改 runbroker.sh,确保 JAVA_HOME 指向正确位置。
Broker 配置
创建 broker.conf 配置文件:
vi /app/rocketmq/rocketmq/conf/broker.conf
namesrvAddr = localhost:9876
brokerIP1 = localhost
启动服务
创建日志目录并启动 Namesrv 与 Broker:
mkdir -p /data/logs/rocketmq
nohup sh /app/rocketmq/rocketmq/bin/mqnamesrv > /data/logs/rocketmq/nameserver.log &
nohup sh /app/rocketmq/rocketmq/bin/mqbroker -n localhost:9876 autoCreateTopicEnable=true > /data/logs/rocketmq/broker.log &
验证进程状态:
jps
关闭服务可使用对应 shutdown 命令:
/app/rocketmq/rocketmq/bin/mqshutdown namesrv
/app/rocketmq/rocketmq/bin/mqshutdown broker
开机自启配置
使用 systemd 管理服务,避免手动启动失效。创建 rocketmqnamesrv.service 和 rocketmqbroker.service:
[Unit]
Description=rocketmq-nameserver
After=network.target
[Service]
Type=simple
User=root
ExecStart=/app/rocketmq/rocketmq/bin/mqnamesrv
Restart=on-failure
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
Broker 服务配置类似,注意 ExecStart 中需指定 -n 地址和配置文件路径。加载配置并启动:
systemctl daemon-reload
systemctl enable rocketmqnamesrv.service
systemctl start rocketmqnamesrv.service
systemctl status rocketmqnamesrv.service
公网访问配置
默认情况下 RocketMQ 仅监听本地或局域网。借助内网穿透工具可将关键端口安全暴露到公网。
安装穿透工具
以 cpolar 为例,使用一键脚本安装:
sudo curl https://get.cpolar.sh | sh
检查服务状态:
sudo systemctl status cpolar
隧道配置
登录 Web 管理界面(通常为 ip:9200),新建 TCP 隧道:
- 隧道名称:自定义(如 rocketmq)
- 协议:TCP
- 本地地址:9876
- 端口类型:随机临时 TCP 端口
- 地区:China Top
创建成功后,获取生成的公网地址(格式如 tcp.cpolar.top:端口号)。此时可在其他设备通过该地址连接 RocketMQ。
固定公网地址
若需长期稳定访问,可保留固定 TCP 地址:
- 在管理界面点击'保留'按钮获取固定端口。
- 编辑隧道,将端口类型改为'固定 TCP 端口',填入保留的地址。
- 更新配置后,公网地址将不再随机变化。
总结
RocketMQ 的部署本身并不复杂,核心难点在于解决网络隔离问题。通过上述步骤,可实现从基础部署到公网远程访问的全流程打通,适用于开发测试及小型生产场景。

