文章目录
一、RocketMQ是什么?
二、准备工作
1.环境要求
2.下载与解压
3.启动MQ
4. 测试是否成功启动
三、安装管理端
1. 代码下载
2. 修改配置文件
3. 启动MQ客户端jar包
四、rocketMQ代码的使用入门
五、问题记录
1. 启动mqbroker.cmd没有反应
2.消费者重复消费消息
一、RocketMQ是什么?
RocketMQ是阿里开源的一款非常优秀中间件产品,脱胎于阿里的另一款队列技术MetaQ,后捐赠给Apache基金
会作为一款孵化技术,仅仅经历了一年多的时间就成为Apache基金会的顶级项目。并且它现在已经在阿里内部被
广泛的应用,并且经受住了多次双十一的这种极致场景的压力。(2017年的双十一,RocketMQ流转的消息量达
到了万亿级,峰值TPS达到5600万)。并且其内部通过Java语言开发,便于阅读与修改。
二、准备工作
1.环境要求
64位JDK 1.8+;
Maven 3.2.x;
64位操作系统系统,本文档在Windows上安装
2.下载与解压
下载地址:https://archive.apache.org/dist/rocketmq/4.5.1/
解压到一个无中文无空格的目录下,解压后目录如下:
3.启动MQ
3.1 更改配置
java的默认启动参数中,启动时堆内存的大小为2g,太大了,调整一下
切换路径到D:\rocketmq-all-4.5.1-bin-release\bin
打开runserver.cmd
把-Xms、-Xmx、-Xmn都设置成512m,将%CLASSPATH%增加"",不然启动时会找不到jdk
同理设置 runbroker.cmd
3.2 启动NameServer
双击mqnamesrv.cmd启动,或者使用启动命令:start mqnamesrv.cmd
如下显示则启动成功
3.3 启动broker
进入cmd命令窗口,切换到D:\rocketmq-all-4.5.1-bin-release\bin
执行 mqbroker.cmd -n localhost:9876 autoCreateTopicEnable=true
4. 测试是否成功启动
4.1 监听消息
进入cmd命令窗口,切换到D:\rocketmq-all-4.5.1-bin-release\bin
执行:
set NAMESRV_ADDR=127.0.0.1:9876
tools.cmd org.apache.rocketmq.example.quickstart.Producer
4.2 发送消息
进入cmd命令窗口,切换到D:\rocketmq-all-4.5.1-bin-release\bin
执行:
set NAMESRV_ADDR=127.0.0.1:9876
tools.cmd org.apache.rocketmq.example.quickstart.Producer
三、安装管理端
1. 代码下载
我们进入到这个dashboard仓库:
https://gitcode.net/mirrors/apache/rocketmq-dashboard
2. 修改配置文件
进入到解压的文件夹D:\rocketmq-dashboard-master\src\main\resources下修改 application.yml 文件
修改客户端的端口号以及MQ的地址和端口号
进入cmd命令窗口,切换到D:\rocketmq-dashboard-master,进行打包成jar包
执行:mvn clean package -Dmaven.test.skip=true
如下显示则启动成功
在D:\rocketmq-dashboard-master\target路径下会生成对应jar包
3. 启动MQ客户端jar包
进入cmd命令窗口,切换到D:\rocketmq-dashboard-master\target,进行打包成jar包
执行:java -jar rocketmq-dashboard-1.0.1-SNAPSHOT.jar
如下显示则启动成功
在自己的浏览器中输入:http://localhost:8888/#/ 即可进入
四、rocketMQ代码的使用入门
五、问题记录
1. 启动mqbroker.cmd没有反应
进入到C:\Users\DELL\store目录下删除底下的所有文件
然后再进行重新启动
2.消费者重复消费消息
最终排查发现,是因为消费者在处理消息的方法onMessage中有异常没有捕获到,导致异常上抛,被consumeMessage捕获并判定为消费失败,从而放到了重试队列当中进行重试。
总结:RocketMq中会引起消息重试的两种情况,内部异常和消费超时。
在Consumer中处理消息时,会在消费完消息后判断消费的总时长,如果 比超时时间要长则返回TIME_OUT,注意这里的超时是在consumeMessage内部逻辑处理完毕之后在进行判断的,如果内部逻辑处理成功,但耗时较长,那么也会被判断为超时。