很多开发者第一次接触消息队列时,最容易卡住的并不是概念,而是环境部署.RocketMQ本身能力很强,但如果NameServer、Broker、JDK路径、启动参数和内存配置没有处理好,服务很可能还没开始验证消息收发,就先在启动阶段报错.对于学习原理、开发测试或轻量联调来说,先在Linux上跑通一套单机RocketMQ环境,是比较稳妥的起点.它不需要一上来就搭集群,也不必急着接入复杂业务,只要先理解NameServer和Broker之间的关系,再完成基础启动和验证,后续扩展就会清晰很多.RocketMQ的核心组件并不复杂.NameServer负责维护路由信息,Broker负责承载消息存储和转发,客户端通过NameServer找到可用Broker后再进行消息发送和消费.只要这条链路先跑通,后面接Spring Boot、做延迟消息、事务消息或集群部署,都会有更明确的基础.本文将从JDK环境检查开始,演示RocketMQ二进制包上传、解压、目录整理、启动脚本参数调整、
broker.conf配置、NameServer与Broker启动验证,再补充systemd开机自启动配置.最后还会通过 cpolar 创建TCP公网地址,把本地9876端口映射出去,方便外部服务器或异地测试环境连接NameServer.这样不仅能完成本机部署,也能进一步验证跨网络访问RocketMQ的基本流程.
目录
- 1.前提条件
- 2.安装RocketMQ
- 3.配置RocketMQ
- 3.1修改runserver.sh和runbroker.sh启动脚本
- 3.2新增broker.conf配置信息
- 3.3启动关闭rocketmq
- 4.配置开机自启动
- 5.安装cpolar内网穿透工具
- 6.配置公网地址
- 7.保留固定TCP公网地址
- 8.总结
1.前提条件
首先需要安装jdk:
java-version下载RocketMQ的源码包以及运行包:
RocketMQ建议的运行环境需要至少12G的内存.
关于RocketMQ的版本: 我们这里采用最新的5.3.4版本.
这里需要小伙伴注意一下,4.x的系列版本已经停止了维护.这意味着目前已经不建议使用4.x的版本了.
2.安装RocketMQ
将下载后的文件上传到/app/rocketmq
mkdir-procketmqcdrocketmq/解压该文件:
unziprocketmq-all-5.3.4-bin-release.zip修改rocketmq文件名:
mvrocketmq-all-5.3.4-bin-release/ rocketmq3.配置RocketMQ
3.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 namesrvAddr=localhost:9876 brokerIP1=localhost3.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:9876autoCreateTopicEnable=true>/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]Description=rocketmq - nameserverDocumentation=rocketmq_nameserverAfter=network.target[Service]Type=sampleUser=rootExecStart=/app/rocketmq/rocketmq/bin/mqnamesrvExecReload=/bin/kill-sHUP$MAINPIDExecStop=/bin/kill-sQUIT$MAINPIDRestart=0LimitNOFILE=65535[Install]WantedBy=multi-user.target编写broker服务:
#创建配置文件vi/etc/systemd/system/rocketmqbroker.service#添加如下内容[Unit]Description=rocketmq - brokerDocumentation=rocketmq_brokerAfter=network.target[Service]Type=sampleUser=rootExecStart=/app/rocketmq/rocketmq/bin/mqbroker-nlocalhost:9876 /app/rocketmq/rocketmq/conf/broker.confExecReload=/bin/kill-sHUP$MAINPIDExecStop=/bin/kill-sQUIT$MAINPIDRestart=0LimitNOFILE=65535[Install]WantedBy=multi-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是随机分配的公网端口号
现在我们用另一台虚拟机启动一下我们的rocketmq:
nohupsh/app/rocketmq/rocketmq/bin/mqbroker-n2.tcp.cpolar.top:11242autoCreateTopicEnable=true>/data/logs/rocketmq/broker.log&如图可见 启动成功:
7.保留固定TCP公网地址
使用cpolar为其配置TCP地址,该地址为固定地址,不会随机变化.
选择区域和描述:有一个下拉菜单,当前选择的是“China Top”.
右侧输入框,用于填写描述信息.
保留按钮:在右侧有一个橙色的“保留”按钮,点击该按钮可以保留所选的TCP地址.
列表中显示了一条已保留的TCP地址记录.
登录cpolar web UI管理界面,点击左侧仪表盘的隧道管理——隧道列表,找到所要配置的隧道rocketmq,点击右侧的编辑.
修改隧道信息,将保留成功的TCP端口配置到隧道中.
- 端口类型:选择固定TCP端口
- 预留的TCP地址:填写保留成功的TCP地址
点击更新.
创建完成后,打开在线隧道列表,此时可以看到随机的公网地址已经发生变化,地址名称也变成了保留和固定的TCP地址.
这样我们的地址就永远不会发生变化啦!
8.总结
完成部署后,一套基础的RocketMQ单机环境就可以在Linux服务器上运行起来.NameServer先启动,Broker再连接NameServer注册路由信息,通过jps和日志确认进程正常后,就具备了后续消息收发测试的基础.
这类原生部署方式适合用来理解RocketMQ的运行结构.相比直接使用封装好的容器环境,手动配置启动脚本、JVM参数、Broker配置和systemd服务,可以更直观看到每个组件在整个消息队列链路中的作用.
配置 cpolar 后,RocketMQ的NameServer端口也可以被外部网络访问.随机TCP端口适合临时验证,固定TCP地址更适合长期联调,避免每次地址变化后都要重新修改客户端或Broker连接配置.
需要注意的是,RocketMQ并不建议在没有认证、隔离和访问控制的情况下长期直接暴露到公网.公网测试可以用于开发联调,但正式环境应结合网络白名单、防火墙、安全组、ACL权限和生产级Broker配置一起规划.
RocketMQ负责消息通信,Linux原生部署帮助理解底层运行方式,cpolar负责打通跨网络测试入口.当这几部分组合起来后,开发者就能从"本机能启动"进一步走到"外部环境也能连接",为后续集成业务系统和扩展集群打下基础.
敬请期待下一篇文章内容
每日心灵鸡汤: 不是目标决定结果,而是结构决定人生!
很多人以为,目标决定结果,所以拼命盯着目标.但真正决定结果的,从来不是目标,而是结构.目标只是方向,属于不可控的外部变量;今天涨多少粉、赚多少钱、瘦多少斤,都不是你能直接控制的.而结构决定的是,你每天是否会持续做那些能够影响结果的动作.当一个人的行动围绕不可控的结果建立,就容易陷入焦虑、拖延和放弃;当行动围绕可控的系统建立,能量就会不断流向输出、反馈和修正.结构决定系统,系统决定行动,行动产生反馈,反馈不断优化位置,最终推动结果自然发生.所以,真正强大的人,不是每天追着目标跑,而是不断优化自己的结构,让正确的事情每天都能持续发生.