前言
相信有很多小伙伴,看到本篇文章时,已被各种报错折磨的苦不堪言,本文针对这些坑助你一臂之力!
本文以Rocket5.0,Maven3.8,Jdk1.8为例
RocketMQ需要的安装环境
1)JDK1.8+=,如果低于1.8会有关于JDK版本过低的提示 (通过java -version命令版本)
2)Maven3.2+= (通过mvn -v命令查看版本)
3)Linux 64位操作系统 (通过uname-a 或者uname -r 或cat /proc/version等查看)
4)强烈建议:安装路径建议在一个没有空格的路径,比如/usr/src或者/opt/local等
这个安装环境很重要,否则将你将会踩一些不必要的坑!!!
一、报错解决方案
因官网就有RocketMQ的安装步骤,故本文重点介绍各种报错的解决方案,附带下载安装的详细步骤!
温馨提示:如果你不关心这些错误,可以直接跳过,进入安装步骤!
1.1 编译的时候就报错[ERROR] mvn <args> -rf :rocketmq-store/broker等
mvn -Prelease-all -DskipTests clean install -U #总是报rocketmq-store或者rocketmq-broker的错误
在命令中追加跳过检查的-Dcheckstyle.skip参数即可:
mvn -Prelease-all -DskipTests -Dcheckstyle.skip clean install -U
温馨提示:这个错误不是因为jdk版本或者maven版本引起的,具体原因目前不明,关于该错误排查,点击进入,查看详情。
1.2 启动mqnamesrv时报错Error: Could not find or load main class org.apache.rocketmq.namesrv.NamesrvStartup
报错原因:你执行rocketmq命令的位置不对,已rocketmq5.0版本为例
解压路径 /usr/src/rocketmq-all-5.0.0-source-release
命令执行路径,应该是
/usr/src/rocketmq-all-5.0.0-source-release/distribution/target/rocketmq-5.0.0/rocketmq-5.0.0/
而你当前执行命令的报错路径,可能是
/usr/src/rocketmq-all-5.0.0-source-release
或者/usr/src/rocketmq-all-5.0.0-source-release/distribution
注:按此方案执行脚本后,仍报这个错误,强烈建议,rm -rf 命令彻底清除解压目录后,重新解压,重新编译!
错误三:一堆关于memory或者OutOfMemory的提示,error='Cannot allocate memory' (errno=12)
报错原因:安装包中默认的配置需要消耗较大的内存,我们一般是在本地虚拟机中运行的,需要手动修改这几个关于内存配置的几个文件!
runserver.sh、runbroker.sh、tools.sh
这个几个文件所在的位置:
cd /usr/src/rocketmq-all-5.0.0-source-release/distribution/target/rocketmq-5.0.0/rocketmq-5.0.0/bin
注:具体修改过程,在下面的安装步骤中的二.5中有详细介绍(避免文章头重脚轻)!
特别提醒:
以上三个错误如果按本文给出的方案处理后,仍报错,强烈建议删除解压目录,重新解压,重新配置!!
级联删除命令:rm -rf /usr/src/rocketmq-all-5.0.0-source-release/
¥¥避过这三个坑,基本可以顺利的安装并运行单机版RocketMQ,下面具体介绍安装、配置步骤。¥¥
二、下载安装步骤
2.1 进入官网,下载RocketMQ5.0安装包
历史版本下载,点击进入
如上图所示,点击here后,进入下载界面
如上图所示,点击下载链接后,会自动进入下载。
下载地址:https://dlcdn.apache.org/rocketmq/5.0.0/rocketmq-all-5.0.0-source-release.zip
2.2 上传Linux环境的指定目录
温馨提示:
先用cd命令,切换到软件安装包存放位置,比如根目录下的mypacket便于统一管理
2.2.1)如果你用的是xshell,如下图所示
2.2.2)如果你用的是FinalShell,如下图所示
2.3 解压到指定目录并编译
查看官方文档的解压、编译
根据官方提示,优化后的命令如下:
cd # 切换到根目录
cd mypackage # 切换到安装包上传目录
unzip rocketmq-all-5.0.0-source-release.zip -d /usr/src # 解压到指定位置
cd rocketmq-all-5.0.0-source-release # 切换到解压目录
mvn -Prelease-all -DskipTests -Dcheckstyle.skip clean install -U #该命令的执行,需提前配置好maven,执行完毕该命令会在当前目录,自动生成target文件夹(该命令的执行少则需耗时5分钟,需耐心等待)
$ cd distribution/target/rocketmq-5.0.0/rocketmq-5.0.0 #mvn编译成功后,即可看到该目录
温馨提示:
1)用mvn命令编译时,需提前安装并配置好JAVA环境变量和Maven环境变量,否则无法使用mvn命令。
2)官方给出的mvn编译命令可能会报错,需在此基础上添加 -Dcheckstyle.skip参数,跳过检查。
编译成功后看到的界面:
CentOS6.5编译成功界面
CentOS7.9编译成功界面
如下图所示,编译成功后,即可在distribution目录下看到target目录
2.4 配置RocketMQ环境变量
复制图图中的pwd路径(路径尾部的/bin,可以不要)
vim /etc/profile
export ROCKETMQ_HOME=/usr/src/rocketmq-all-5.0.0-source-release/distribution/target/rocketmq-5.0.0/rocketmq-5.0.0
export PATH=$PATH:$ROCKETMQ_HOME/bin
注意事项: ROCKETMQ_HOME是解压+编译后的目录,不是解压的根目录!!
source /etc/profile # 使配置文件重新生效
2.5 进入编译后的深层bin目录,分别修改runserver.sh、runbroker.sh
预告:修改这几个配置,是因为,不修改会报内存错误,难以正常启动RocketMQ ,错误如下图所示。
下面一起来修改一下这些配置!
cd /usr/src/rocketmq-all-5.0.0-source-release/ && ls
cd distribution/target/rocketmq-5.0.0/rocketmq-5.0.0/ && ls
cd bin && ls
温馨提示:
本地虚拟机测试,需进行修改(否则可能会出现Out of Memory Error的错误提示),如果是生产环境,不但不调小,甚至还需要根据需求调大!!!
2.5.1)修改runserver.sh的内存占用
小技巧:按Esc,焦点锁定在需要编辑的行按1yy复制一行,再按p粘贴,然后再按i键,进入编辑。
vim runserver.sh
#JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
2.5.2)修改runbroker.sh的内存占用
vim runbroker.sh
#JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g"
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m"
先修改这一处,如下图所示,如果继续报内存溢出问题,继续修改
#JAVA_OPT="${JAVA_OPT} -XX:MaxDirectMemorySize=15g"
JAVA_OPT="${JAVA_OPT} -XX:MaxDirectMemorySize=1g"
2.5.3)修改tools.sh的内存占用(了解,暂不修改)
注意:如果修改前面两个,就不报内存溢出异常,可以不修改tools.sh中的内存占用。
vim tools.sh
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m"
注:上方是默认的内存参数1g,可以据需调整为256m
三、启动、关闭RocketMQ服务
注意:
启动命令使用的是编译后的bin目录下的sh命令,不是解压后的/distribution/bin的sh命令。
/usr/src/rocketmq-all-5.0.0-source-release/distribution/target/rocketmq-5.0.0/rocketmq-5.0.0/bin
3.1 启动NameServer
3.1.1)方式一:前台启动服务
jps #查看已启动的java服务
cd /usr/src/rocketmq-all-5.0.0-source-release/distribution/target/rocketmq-5.0.0/rocketmq-5.0.0/ && ls
sh bin/mqnamesrv # 前台运行,便于查看报错
CentOS6.5启动成功的界面
CentOS7.9启动成功的界面
启动成功后,可以尝试Ctrl+c停掉服务,然后采用后台启动
3.1.2)方式二:后台启动服务
nohup sh bin/mqnamesrv & #官网提供的启动方式
3.1.3) 查看 NameServer 启动日志
tail -f ~/logs/rocketmqlogs/namesrv.log
connect remote host[192.168.31.128:9876] success, AbstractBootstrap$PendingRegistrationPromise@73e937cf(success)
3.2 启动Broker
1)后台启动broker
sh bin/mqbroker -n localhost:9876 autoCreateTopicEnable=true &
2)查看broker的启动日志
tail -f ~/logs/rocketmqlogs/broker.log
启动成功的情况下,日志中会包含如下日志:
The broker[%s, 192.168.31.128:10911] boot success...
3.3 发送/接收消息测试
3.3.1)使用tools.sh发送消息
export NAMESRV_ADDR=localhost:9876 #NAMESRV_ADDR环境变量配置
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
会看到大量的:SendResult [sendStatus=SEND_OK, msgId= ...
下图分别是CentOS6.5和CentOS7.9的执行结果
3.3.2)使用tools.sh接收消息
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
会看到大量的:ConsumeMessageThread_%d Receive New Messages: [MessageExt...
若能正确打印上述日志,则表明单击版 RocketMQ 部署成功!
3.4 Java应用访问RocketMQ服务器,需开放9876防火墙端口
firewall-cmd --zone=public --add-port=9876/tcp --permanent #开启 9876 端口
firewall-cmd --reload #重启防火墙
firewall-cmd --zone=public --list-ports #查看开放的端口
3.5 关闭NameServer和Broker
分别通过sh bin/mqshutdown命令,关闭broker和namesrv
> 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
四、拓展
RockertMQ常用命令
查看集群情况 ./bin//mqadmin clusterList -n 127.0.0.1:9876
查看 broker 状态 ./bin/mqadmin brokerStatus -n 127.0.0.1:9876 -b 172.20.1.138:10911
查看 topic 列表 ./bin/mqadmin topicList -n 127.0.0.1:9876
查看 topic 状态 ./bin/mqadmin topicStatus -n 127.0.0.1:9876 -t MyTopic (换成想查询的 topic)
查看 topic 路由 ./bin/mqadmin topicRoute -n 127.0.0.1:9876 -t MyTopic
总结
本文主要介绍了RocketMQ5.0版的安装和配置,重点介绍了在安装过程中遇到的错误及其解决方案,给后来者的提供一些参考或启示。
总之,如果按照上述步骤,仍不能正常启动服务,简单粗暴rm -rf 彻底删除,重新解压、编译、配置即可。
尾言
本文中各个环节都是反复多次实验,亲测可用,然而RocketMQ是一个庞大的知识点,部分异常的解决方案,可能未能涉及,后期如有发现,会陆续更新。
如果觉得还不错,欢迎点赞收藏或者留言!
附注
1、RocketMQ编译报错:mvn -Prelease-all -DskipTests clean install -U | mvn <goals> -rf :rocketmq-store|broker