国产化(银河麒麟_海光CPU)消息中间件选型及安装
目录
一.消息中间件选型建议
1.1各类型消息中间件对比
1.2ActiveMQ或者RocketMQ性能指标对比
1.3综合考虑
二.RocketMQ下载 安装
2.1官方兼容性要求
2.2官网下载
2.3安装
2.3.1解压
2.3.2赋权
2.3.3启动mqnamesrv
2.3.3.1启动异常
2.3.3.2对RocketMQ的影响评估
2.3.3.3解决方案建议
2.3.3.4重新启动
2.3.4启动mqbroker
2.3.4.1启动异常
2.3.4.2解决方案
2.3.4.3重新启动
三.关闭服务器
一.消息中间件选型建议
1.1各类型消息中间件对比
因为国产化服务器的特殊情况,我是比较建议使用开发语言为java的消息中间间,因为涉及到国产化适配的原因,用其他语言相对来说会比较复杂,涉及到源码编译,必要的编译库等等。所以综上所说建议选择ActiveMQ或者RocketMQ。
1.2ActiveMQ或者RocketMQ性能指标对比
对比维度 | RocketMQ | ActiveMQ |
---|---|---|
吞吐量 | 百万级(约100,000-1,000,000条/秒) | 万级(约10,000条/秒) |
延迟 | 毫秒级(5-50ms) | 毫秒级(10-100ms) |
可靠性 | 分布式架构+多副本机制,可靠性最高 | 支持持久化和事务,集群模式下可靠性较弱 |
扩展性 | 天然支持分布式部署,扩展性最佳 | 扩展性较差,集群配置复杂 |
1.3综合考虑
ActiveMQ相对于RocketMQ无论是性能上还是官方更新频率上都有很大差距,所以本文建议使用RocketMQ
二.RocketMQ下载 安装
2.1官方兼容性要求
本人环境为银河麒麟及openjdk1.8
根据RocketMQ官方文档和社区实践,对于OpenJDK 8环境,建议使用以下RocketMQ版本:
RocketMQ 4.x系列:
官方明确要求JDK 8+(包括OpenJDK 8)
推荐稳定版本:4.9.4(最新4.x稳定版)
其他兼容版本:4.3.1、4.2.0等
RocketMQ 5.x系列:
需要JDK 11+,不推荐用于OpenJDK 8环境
5.x版本在JDK 8上可能遇到兼容性问题
因此最后选择4.x版本
4.x版本推荐与特性对比
推荐版本 | 发布时间 | 主要特性 | 适用场景 |
---|---|---|---|
4.9.4 | 2021年 | 稳定版,功能完善 | 生产环境首选 |
4.3.1 | 2018年 | 基础功能完整 | 传统企业应用 |
4.2.0 | 2017年 | 基础消息队列 | 简单消息场景 |
最终选择4.9.4作为本次安装的最终版本
2.2官网下载
下载地址(建议右键复制下载地址使用迅雷下载速度会更快)
https://rocketmq.apache.org/zh/release-notes/2025/05/06/5.3.3/
如图所示
2.3安装
因为开发语言的关系,可以直接选用官网编译好的包直接在国产化机器运行。
官方文档
https://rocketmq.apache.org/zh/docs/4.x/quickstart/01quickstart
2.3.1解压
unzip rocketmq-all-4.9.4-bin-release.zip
2.3.2赋权
chmod -R 777 rocketmq-all-4.9.4-bin-release
2.3.3启动mqnamesrv
sh bin/mqnamesrv
2.3.3.1启动异常
启动后出现警告
OpenJDK 64-Bit Server VM warning: Using the DefNew young collector with the CMS collector is deprecated and will likely be removed in a future release
OpenJDK 64-Bit Server VM warning: UseCMSCompactAtFullCollection is deprecated and will likely be removed in a future release.
警告信息解析
这两条警告信息表明当前RocketMQ Name Server运行时使用了已被OpenJDK标记为废弃的CMS(Concurrent Mark Sweep)垃圾收集器组合:
DefNew+CMS组合废弃警告:Using the DefNew young collector with the CMS collector is deprecated表示新生代使用DefNew收集器与老年代CMS收集器的组合已被废弃。
CMS压缩参数废弃警告:UseCMSCompactAtFullCollection is deprecated表示CMS在Full GC时进行内存压缩的参数已被废弃。
CMS收集器是JDK 1.5时期推出的老年代并发收集器,在JDK 9中被标记为废弃,JDK 14中已完全移除。其核心问题包括内存碎片化、处理器资源竞争及无法有效处理并发阶段产生的浮动垃圾等。
2.3.3.2对RocketMQ的影响评估
虽然出现警告,但The Name Server boot success. serializeType=JSON表明Name Server已成功启动,说明:
当前运行状态:警告不会影响RocketMQ Name Server的基本功能运行
潜在风险:
未来JDK版本升级后将无法使用CMS收集器
CMS在长时间运行后可能出现内存碎片问题,导致Full GC时间延长
并发模式失败(Concurrent Mode Failure)可能导致意外停顿
2.3.3.3解决方案建议
短期解决方案(维持OpenJDK 8环境)
调整RocketMQ启动脚本中的JVM参数,改用G1垃圾收集器:
G1收集器相比CMS具有以下优势:
可预测的停顿时间模型
更好的内存碎片处理能力
更高的吞吐量
更适合大内存堆场景
进入bin目录
cd rocketmq-all-4.9.4-bin-release/bin
编辑runserver.sh脚本
vim runserver.sh
脚本解析:
检测当前Java主版本号(通过$JAVA -version获取)
对Java 8及以下版本(主版本号小于9)配置CMS垃圾收集器参数
对Java 9及以上版本配置G1垃圾收集器参
将第二个红框修改为:
JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:SoftRefLRUPolicyMSPerMB=0"
如图
2.3.3.4重新启动
sh bin/mqnamesrv
成功:The Name Server boot success. serializeType=JSON
2.3.4启动mqbroker
sh bin/mqbroker -n localhost:9876 -c conf/broker.conf
2.3.4.1启动异常
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000005c0000000, 8589934592, 0) failed; error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 8589934592 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /root/server/server_app/rocketmq-all-4.9.4-bin-release/hs_err_pid10282.log
错误显示JVM无法分配8GB内存(8589934592 bytes),说明内存不足
2.3.4.2解决方案
编辑runbroker.sh启动脚本
vim runbroker.sh
修改运行大小为2g
修改broker配置文件
cd rocketmq-all-4.9.4-bin-release/conf
vim broker.conf
# 所属集群名字
brokerClusterName = DefaultCluster
brokerName = broker-a
# 0 表示 Master,> 0 表示 Slave
brokerId = 0
# 删除文件时间点,默认凌晨4点
deleteWhen = 04
# 文件保留时间,默认48小时
fileReservedTime = 48
# Broker 的角色
# - ASYNC_MASTER 异步复制Master
# - SYNC_MASTER 同步双写Master
# - SLAVE
brokerRole = ASYNC_MASTER
# 刷盘策略-异步
# - ASYNC_FLUSH 异步刷盘
# - SYNC_FLUSH 同步刷盘
flushDiskType = ASYNC_FLUSH
# 是否允许 Broker 自动创建 Topic,建议线下开启,线上关闭 !!!
autoCreateTopicEnable=true
brokerIP1=192.168.1.8
# Broker 对外服务的监听端口
listenPort=10311
# 检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
# 限制的消息大小
#maxMessageSize=65536
2.3.4.3重新启动
sh bin/mqbroker -n localhost:9876 -c conf/broker.conf
The broker[broker-a, 192.168.1.8:10311] boot success (成功)
注意
4.9.4版本的标准启动命令仅支持基础参数:
sh bin/mqbroker -n localhost:9876 -c conf/broker.conf
5.x版本支持即 Broker 和 Proxy 同进程部署
sh bin/mqbroker -n localhost:9876 --enable-proxy
三.关闭服务器
$ sh bin/mqshutdown broker
The mqbroker(36695) is running...
Send shutdown request to mqbroker(36695) OK$ sh bin/mqshutdown namesrv
The mqnamesrv(36664) is running...
Send shutdown request to mqnamesrv(36664) OK