前言
MQ全称为Message Queue,即消息队列 ,是一种提供消息队列服务的中间件,也称为消息中间件,是一套提供了消息生 产、存储、消费全过程的软件系统,遵循FIFO原则。
MQ的使用场景
限流削峰
MQ可以将系统的超量请求暂存其中,以便系统后期可以慢慢进行处理,从而避免了请求的丢失或系统 被压垮。
异步解耦
上游系统对下游系统的调用若为同步调用,则会大大降低系统的吞吐量与并发度,且系统耦合度太高。 而异步调用则会解决这些问题。所以两层之间若要实现由同步到异步的转化,一般性做法就是,在这两层间添加一个MQ层。 即使消费者挂掉也不影响生产者工作,只要把消息放入队列即可,消费者重启后自己消费即可。
数据收集
分布式系统会产生海量级数据流,如:业务日志、监控数据、用户行为等。针对这些数据流进行实时或 批量采集汇总,然后对这些数据流进行大数据分析,这是当前互联网平台的必备技术。通过MQ完成此 类数据收集是最好的选择。
大数据处理
比如我们的平台向“三方平台”获取数据,一次请求了大量数据回来要进行处理,由于数据较多处理不过来,那么就可以放入MQ,再创建一些消费者进行数据处理即可。
使用MQ的好处
提高系统响应速度
任务异步处理。 将不需要同步处理的并且耗时长的操作由消息队列通知消息接收方进行异步处理。提高了应用程序的响应时间。
提高系统稳定性
一是并发被消峰后,系统不容易被高并发打垮,二是系统挂了也没关系,操作内容放到消息队列不丢失,后续重新消费者一样能消费做业务处理。
排序保证 FIFO
遵循队列先进先出的特点,能够保证消息按照添加的数据被消费。
常见MQ产品
ActiveMQ
ActiveMQ是使用Java语言开发一款MQ产品。早期很多公司与项目中都在使用。但现在的社区活跃度已 经很低。现在的项目中已经很少使用了。
RabbitMQ
RabbitMQ是使用ErLang语言开发的一款MQ产品。其吞吐量较Kafka与RocketMQ要低,且由于其不是 Java语言开发,所以公司内部对其实现定制化开发难度较大。
Kafka
Kafka是使用Scala/Java语言开发的一款MQ产品。其最大的特点就是高吞吐率,常用于大数据领域的实 时计算、日志采集等场景。其没有遵循任何常见的MQ协议,而是使用自研协议。对于Spring Cloud Netç ix,其仅支持RabbitMQ与Kafka。
RocketMQ
RocketMQ是使用Java语言开发的一款MQ产品。经过数年阿里双11的考验,性能与稳定性非常高。其 没有遵循任何常见的MQ协议,而是使用自研协议。对于Spring Cloud Alibaba,其支持RabbitMQ、 Kafka,但提倡使用RocketMQ
技术选型建议:
- 允许数据丢失,想要快速上线,推荐使用Redis
- 大数据场景,日志收集,实时性要求高,推荐Kafka
- 金融领域,不能接受消息丢失或重复,推荐使用RabbitMQ或者RocketMQ
RocketMQ介绍
RocketMQ是一个统一消息引擎、轻量级数据处理平台。
RocketMQ是⼀款阿⾥巴巴开源的消息中间件,双十一承载了万亿级消息的流转,2016年11⽉,阿⾥巴巴向 Apache 软件基⾦会捐赠 RocketMQ,成为 Apache 孵化项⽬,2017 年 9 ⽉ ,Apache 宣布 RocketMQ孵化成为 Apache 顶级项⽬(TLP )成为国内⾸个互联⽹中间件在 Apache 上的顶级项⽬。
官网:https://rocketmq.apache.org
RocketMQ特征
- 支持集群模型、负载均衡、水平扩展能力
- 亿级别消息堆积能力
- 采用零拷贝的原理,顺序写盘,随机读
- 底层通信框架采用Netty NIO
- NameServer代替Zookeeper,实现服务寻址和服务协调
- 消息失败重试机制、消息可查询
- 强调集群无单点,可扩展,任意一点高可用,水平可扩展
- 经过多次双十一的考验
RocketMQ安装
1.下载RocketMQ
下载地址:https://rocketmq.apache.org/release-notes/2017/12/13/4.2.0
下载后解压
- Bin : 可执行文件目录
- Conif:配置文件目录
- Lib : 依赖库,一堆Jar包
2.配置ROCKETMQ_HOME
解压压缩包,配置 ROCKETMQ_HOME
3.启动RocketMQ
启动NameServer
Cmd命令框执行进入至‘MQ文件夹\bin’下,然后执行 start mqnamesrv.cmd
,启动NameServer。
成功后会弹出提示框,此框勿关闭。
启动Broker
进入至‘MQ文件夹\bin’下,修改Bean目录下的runbroker.cmd 中JVM占用内存大小
CMD执行start mqbroker.cmd -n 127.0.0.1:9876 autoCreateTopicEnable=true
,启动Broker。
成功后会弹出提示框,此框勿关闭
RocketMQ插件
为了方便管理,我们需要安装一个可视化插件
1.下载插件
RocketMQ可视化管理插件下载地址:https://github.com/apache/rocketmq-externals/releases
2.修改配置
解压后,修改配置:src/main/resource/application.properties 如下:
这里需要指向Name Server 的地址和端口
3.打包插件
回到安装目录,执行: mvn clean package -Dmaven.test.skip=true
,然后会在target目录生成打包后的jar文件
4.启动插件
进入 target 目录,执行 java -jar rocketmq-console-ng-1.0.0.jar
, 访问 http://localhost:8080