在银河麒麟系统安装rocketmq需使用openjdk 8和4.9.4版本,修改runbroker.sh与runserver.sh的jvm内存参数(如-xms512m -xmx512m),配置brokerip1为本机实际ip,开放9876端口,启动nameserver和broker后通过tools.sh验证消息收发。

在银河麒麟操作系统上安装和配置RocketMQ,需适配国产化环境的JDK版本、内存限制与ARM/海光CPU架构特性,避免因JVM参数不当或端口未开放导致服务启动失败或无法远程访问。
准备环境与下载适配版本
确认系统已安装OpenJDK 8(银河麒麟V10默认自带),执行java -version验证输出含openjdk version "1.8";若未安装,先运行yum install java-1.8.0-openjdk-devel。
前往Apache归档库下载RocketMQ 4.9.4(【OpenJDK 8唯一稳定兼容版本】),地址:https://www.php.cn/link/fb37f9064da23d9ce6153774d6b3e8d0;务必选择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目录,用vi runbroker.sh修改第38行左右的JAVA_OPT变量:
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m"——这是4G内存机器的安全值;若为2G内存,需进一步降至-Xms256m -Xmx256m,否则mqbroker启动后立即静默退出,无任何错误日志。
同目录下编辑runserver.sh,将原-Xms4g -Xmx4g改为-Xms256m -Xmx256m;NameServer对内存不敏感,但过大会抢占Broker资源。
启动NameServer并验证
第一步:执行cd /usr/local/rocketmq && nohup sh bin/mqnamesrv &。
第二步:立即查看启动日志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日志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通信正常,基础消息链路已打通。











