耗时3天整理!谈谈你对MQ(消息中间件)的理解

简介: MQ全称是Message Queue,直译过来叫做消息队列,主要是作为分布式应用之间实现异步通信的方式。

昨天,有位56年工作经验的粉丝面试被问到,什么是消息中间件。平时只关注使用,并没有去总结过,竟然被这个问题住了。今天,我给大家来聊一聊。

另外,我花了1个多星期,准备了一份10W字的面试题解析配套文档,想获取的小伙伴可以扫码左侧二维码拿。

1、什么是MQ

MQ全称是Message Queue,直译过来叫做消息队列,主要是作为分布式应用之间实现异步通信的方式。

4a19f60a57d48ada9f0a208c2042d38d.jpg

主要由三个部分组成,分别是生产者、消息服务端和消费者。

2bb9e43b3f16adffd5421e9733804c8a.jpg

生产者(Producer),是生产消息的一端,相当于消息的发起方,主要负责载业务信息的消息的创建。

然后是消息服务端(Server),是处理消息的单元,本质就是用来创建和保存消息队列,它主要负责消息的存储、投递以及跟消息队列相关的附加功能。消息服务端是整个消息队列最核心的组成部分。

第三个是消费者(Consumer),是消费消息的一端,主要是根据消息所承载的信息去处理各种业务逻辑。

2、MQ的应用场景

那么,我们为什么要用MQ,它能解决什么问题呢?我从以下三个方面来分析:

f513334ec550e31fc7ee418464c32331.jpg

第一个是流量消峰,主要是针对大流量入口过大,而业务需求又要短时间响应。但是服务器性能无法满足,导致大量请求积压,从而使得客户端大量等待超时的场景。为了保证高可用,可以把大量的并行任务发送给MQ,MQ再将请求分发给其他服务器,从而平稳地处理后续的业务。起到一个大流量缓冲的作用。

举个例子,假设订单系统最大QPS是1万,这个处理能力应付正常时段在1秒内就能返回结果。但是在流量高峰期,比如促销秒杀,如果QPS达到2万,订单系统就处理不过来了,只能在超过负载后不允许用户下单。如果使用消息队列做缓冲,我们可以取消这个限制,把超出负载的订单分散成一段时间来处理,这时有些用户可能在下单十几秒后才能收到下单成功的操作,但是比不能下单的体验要好。

第二个是应用解耦

2f6d89e18e0445555f224c14f4755134.jpg

可以理解为,把一些相关的、但耦合度不高的系统关联起来,以电商应用为例,比如订单系统、库存系统、物流系统、支付系统有关联,但是有没有那么紧密。每个系统将一些约定好的消息发送到 ,另外的系统直接去消费这些消息就可以了,它可以解决不同系统之间使用不同的框架或者不同编程语言的兼容性问题,从而提高整个系统的灵活性。

第三个是异步处理

68a4ffb34b251858a5fef61284d79272.jpg

主要应用于实时性要求不严格的场景,比如用户登录发送验证码,支付成功通知等等。服务提供方(生产者)只需要将协商好的消息发送到消息队列,之后的处理就由消费者,也不需要等待消费者的返回结果。

3、如何选择MQ

8b0f4e91516a407bf5c79f0fbff449f2.jpg

目前,主流的消息中间件有ActiveMQ、RabbitMQ、Kafka、RocketMQ、Pulsar。在技术选型的时候,可以根据具体的业务需求更合适的中间件。

08b964aafee58dde7db91a2ffa85ecc8.jpg

数据量大、吞吐量要求比较高的场景一般采用Kafka;

对消息可靠性要求很高,甚至要求支持事务的场景,比如金融互联网,可以选择RocketMQ;

对于中小型公司来说, 可以选择RabbitMQ,它利用erlang 语言本身的并发优势,性能好 在微秒级。

而Pulsar近两年开始流行起来了,它是下一代云原生分布式消息流平台,可以集消息、存储、轻量化函数式计算为一体。

至于ActiveMQ,目前的一些新项目很少有人用了。

好了,以上就是我对MQ的理解。如果我的分享对你有帮助,可以分享给更多的人。关注我,面试不再难!

最后,把之前分享的视频全部整理成了文字,想获取的小伙伴可以扫描文章底部二维码拿!希望能够以此来提高各位粉丝的通过率。

ee90d9963df444db88b33d6e798a5b94.gif

我是被编程耽误的文艺Tom,只弹干货不掺水!你们的支持就是我最大的动力!关注我,面试不再难!

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
4月前
|
消息中间件 存储 负载均衡
消息中间件的选择:RabbitMQ是一个明智的选择
消息中间件的选择:RabbitMQ是一个明智的选择
87 0
|
3月前
|
消息中间件 存储 中间件
【消息中间件】详解三大MQ:RabbitMQ、RocketMQ、Kafka
【消息中间件】详解三大MQ:RabbitMQ、RocketMQ、Kafka
419 0
|
3天前
|
消息中间件 存储 RocketMQ
消息中间件-RocketMQ技术(二)
消息中间件-RocketMQ技术(二)
|
3天前
|
消息中间件 存储 中间件
消息中间件-RocketMQ技术(一)
消息中间件-RocketMQ技术(一)
|
2月前
|
消息中间件 编解码 Docker
Docker部署RabbitMQ消息中间件
【7月更文挑战第4天】Docker部署RabbitMQ消息中间件
236 3
|
2月前
|
消息中间件 NoSQL Kafka
消息中间件(RocketMQ、RabbitMQ、ActiveMQ、Redis、kafka、ZeroMQ)以及之间的区别
消息中间件(RocketMQ、RabbitMQ、ActiveMQ、Redis、kafka、ZeroMQ)以及之间的区别
|
2月前
|
消息中间件 Java Spring
实现Spring Boot与RabbitMQ消息中间件的无缝集成
实现Spring Boot与RabbitMQ消息中间件的无缝集成
|
3月前
|
消息中间件 存储 监控
【消息中间件】详解mq消息积压
【消息中间件】详解mq消息积压
112 0
|
10月前
|
消息中间件 缓存 API
消息中间件系列教程(14) -RabbitMQ-自动补偿机制
消息中间件系列教程(14) -RabbitMQ-自动补偿机制
204 0
|
4月前
|
消息中间件 Java 数据安全/隐私保护
Spring Cloud 项目中实现推送消息到 RabbitMQ 消息中间件
Spring Cloud 项目中实现推送消息到 RabbitMQ 消息中间件