RocketMQ的安装与启动(基于Linux与JDK1.8)
下载项目
首先Java工程选择对应的RocketMQ版本,具体参考以下两图:
- 举例:SpirngCloudAlibabaVersion为2.2.9RELEASE,MQ则选择4.9.4版本。
- 举例:如果是SpringBoot项目,如我的SpringBoot项目为2.2.3版本,对应SpirngCloudAlibaba为2.2.0RELEASE,MQ则选择4.4.0版本。
- 确定版本后到官网下载(版本号自行修改):https://www.apache.org/dyn/closer.cgi?path=rocketmq/4.9.3/
-
安装
解压并修改启动配置
- 将下载好的ZIP文件在提前创建好的文件夹上unzip命令解压缩。
赋权操作:执行chmod 777 /rocketmq-all-5.1.2-bin-release/*
- 因为默认启动配置使用内存较大,对其进行修改。
-
启动
启动namesrv(默认9876端口)
- 进入路径 cd bin/
- 后台启动 nohup sh mqnamesrv &
- 查看日志确认是否启动成功 tail -f ~/logs/rocketmqlogs/namesrv.log
- 也可以通过端口查看 netstat -an|grep 9876
-
关闭命令sh mqshutdown namesrv
启动broker(默认10911端口)
- 进入路径 cd bin/
- 后台启动 nohup ./mqbroker -n localhost:9876 &
- 查看日志确认是否启动成功 tail -f ~/logs/rocketmqlogs/broker.log
-
关闭命令sh mqshutdown broker
测试
# 声明一个 namesrv 的地址 export NAMESRV_ADDR=localhost:9876 # 发送消息 ./tools.sh org.apache.rocketmq.example.quickstart.Producer # 声明一个 namesrv 的地址 export NAMESRV_ADDR=localhost:9876 # 接收消息 ./tools.sh org.apache.rocketmq.example.quickstart.Consumer
DashBoard的搭建
//可视化页面的搭建
SpringBoot工程接入RocketMQ
//TODO最佳实践
部署投产过程中踩的雷
本机SpringBoot项目无法往远程服务器的RocketMQ发送消息;
-
具体报错:Producer无法发送消息且Client日志一直打印如下消息:
RocketMq closeChannel: close the connection to remote address[]
-
解决方案:
1.Client为Java工程本地启动。 2.确认MQ服务与Client版本匹配。 3.MQ服务机的9876与10911端口安全组需要开放给Clinet的ip,同时MQ服务机可以curl通Client的ip
本机SpringBoot项目无法消费消息;
- 具体报错:本机项目Producer往远程服务器MQ发送消息状态OK,且根据MessageId可以在dashboard查询到消息,但是本机Client无法消费到消息。
-
解决方案1:
1.进入dashboard,确认消息对应的topic下的消费组。 2.RocketMQ分为集群模式和广播模式,集群模式下,topic+tag在一个订阅组内只会被其中一个消费者终端消费,需要确认是否有其他消费者终端消费了该消息。
-
解决方案2:
1.远程服务器未创建该topic。 2.查看话题列表:sh mqadmin topicList -n 127.0.0.1:9876 3.在bin路径下执行 ./mqadmin updateTopic -n localhost:9876 -b localhost:10911 -t 你的topic名称 4.或使用该命令启动broker nohup sh mqbroker -n localhost:9876 autoCreateTopicEnable=true -c ../conf/broker.conf &
消费者无法注册到MQ的话题的订阅组中(//TODO);
- 如下两图所示:
1.参考文章:https://blog.csdn.net/xhmico/article/details/122938904
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net