在银河麒麟系统上部署RocketMQ,核心要点在于JDK版本、内存参数和网络配置。选择正确的版本、合理调整内存、正确配置IP地址,即可顺利运行。下面将详细拆解每个步骤,并指出常见问题,帮助您逐一解决。

首先进行环境适配,银河麒麟V10系统默认预装OpenJDK 8,这与RocketMQ 4.9.4版本完美兼容。若尝试使用5.x版本,则需JDK 11或更高版本,否则在麒麟系统上会直接报错。因此,版本选择至关重要,切勿盲目追求新版本。
准备环境与下载适配版本
首先确认JDK是否已安装:执行java -version命令,若输出包含openjdk version "1.8"则表示环境正常。若未安装,请使用yum install java-1.8.0-openjdk-devel命令进行安装。
接下来,前往Apache归档库下载RocketMQ 4.9.4(【OpenJDK 8唯一稳定兼容的版本】),请务必选择rocketmq-all-4.9.4-bin-release.zip文件。需注意,5.x系列强制要求JDK 11及以上版本,在麒麟V10 SP2上会直接抛出UnsupportedClassVersionError错误并退出,请避免此问题。
将压缩包上传至/usr/local目录,执行解压并重命名操作:unzip rocketmq-all-4.9.4-bin-release.zip && mv rocketmq-all-4.9.4-bin-release rocketmq。
配置JVM内存参数(关键避坑步骤)
在银河麒麟虚拟机或低配置物理机上,默认8G堆内存极易触发OOM(内存溢出)。必须手动调小,否则服务启动后会静默退出,且不产生任何错误日志。
进入/usr/local/rocketmq/bin目录,编辑runbroker.sh文件,找到第38行附近的JAVA_OPT变量,修改为:
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m"
此配置适用于4G内存的机器。若内存仅为2G,则需进一步降低至-Xms256m -Xmx256m,否则Broker启动后会立即静默退出,无任何日志输出。
在同一目录下编辑runserver.sh,将原有的-Xms4g -Xmx4g修改为-Xms256m -Xmx256m。NameServer对内存需求不高,设置过大反而会抢占Broker的资源,得不偿失。
启动NameServer并验证
第一步:执行cd /usr/local/rocketmq && nohup sh bin/mqnamesrv &命令,后台启动NameServer。
第二步:查看启动日志,运行tail -f ~/logs/rocketmqlogs/namesrv.log,等待出现The Name Server boot success.提示,通常3-5秒内即可完成启动。
第三步:检查端口是否已监听,执行netstat -tuln | grep 9876。若无输出,则表示防火墙阻止了该端口,请执行sudo firewall-cmd --permanent --add-port=9876/tcp && sudo firewall-cmd --reload命令放行。
配置并启动Broker
方法一:单机快速启动(适用于开发测试)
直接执行nohup sh bin/mqbroker -n localhost:9876 &命令即可启动。Broker将使用默认配置监听本地9876端口,但此时外部客户端无法连接,因为brokerIP1默认设置为内网地址或127.0.0.1。
方法二:生产环境必配外网IP(关键步骤)
编辑/usr/local/rocketmq/conf/broker.conf配置文件,在文件末尾添加以下两行:
namesrvAddr=localhost:9876
brokerIP1=192.168.1.100 —— 注意,192.168.1.100需替换为本机实际的对外IP地址(可通过ip a命令查询ens3等主网卡的inet地址)。【若漏填brokerIP1,将导致远程Producer连接超时】。
保存配置文件后,执行nohup sh bin/mqbroker -n localhost:9876 -c conf/broker.conf &命令启动Broker。
验证Broker日志,运行tail -f ~/logs/rocketmqlogs/broker.log,若看到The broker boot success.提示,则表示启动成功。
测试消息收发连通性
第一步:设置环境变量export NAMESRV_ADDR=localhost:9876。
第二步:发送测试消息,执行sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer,终端应输出多行SendResult [sendStatus=SEND_OK, ...]。
第三步:接收测试消息,执行sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer,几秒内将打印出相同数量的Receive New Messages:日志,按Ctrl+C终止。
测试通过后,说明NameServer与Broker通信正常,基础消息链路已成功打通。接下来即可放心部署业务应用。
