🥰🥰🥰来都来了,不妨点个关注叭!
👉博客主页:欢迎各位大佬!👈
文章目录
- 1. MQ 是什么?
- 1.1 MQ 本质
- 1.2 系统间通信
- 2. MQ的作用是什么?
- 2.1 异步解耦
- 2.2 流量削峰
- 2.3 消息分发
- 2.4 延迟通知
- 2.5 日志处理
- 3. 为什么选择 RabbitMQ?
- 4. RabbitMQ 是什么?
本专栏为 RabbitMQ 相关知识~
小伙伴们都知道,Rabbit 是兔子这个意思,可以看到,互联网行业有很多公司,都喜欢使用动物命名产品,或者以动物的形象作为公司的logo,比如腾讯的企鹅等~
Rabbit 也是一个公司名,开发始于 2006年,之所以取名为 Rabbit,是因为兔子行动非常迅速并且繁殖起来非常疯狂,RabbitMQ 的开创者认为这个名字再合适不过了
MQ(Message queue)消息队列,RabbitMQ 是 Rabbit 企业下的一个消息队列产品,RabbitMQ 是一个实现了 AMQP 的消息队列,是当前主流的消息中间件之一!
✨ AMQP 是什么呢?这里出现了一个我们不太熟悉的名词~
✨ AMQP(Advanced Message Queuing Protocol)即高级消息队列协议,是一个通用的应用层协议,提供统一消息服务的协议,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端或中间,开发语言等条件的限制。(抓重点,是一个通用的应用层协议,高级消息队列协议,协议嘛~就是一种约定)
1. MQ 是什么?
在互联网中,会经常使用 MQ 来作为消息通信服务,我们一起来看一下什么是 MQ 吧!
1.1 MQ 本质
【MQ】(Message queue),消息队列,字面意思来看,本质是一个队列,FIFO先进先出,但这里的消息队列,只不过队列中存放的是消息,消息可以非常简单,也可以非常复杂
1.2 系统间通信
MQ 多用于分布式系统之间进行通信(系统通信,相当于数据传输)
这里补充介绍一下,系统之间的调用通常有两种方式:
-
同步通信:直接调用对方的服务,数据从一端发出后立即就可以到达另一端
-
异步通信:数据从一端发出后,先进入一个容器进行临时存储,当达到某种条件后,再由这个容器发送给另一端(这个容器的一个具体实现就是MQ)
RabbitMQ 就是 MQ 的一种实现
2. MQ的作用是什么?
MQ 的工作是:接收并转发消息
可以把 MQ 消息队列想象成一个仓库,采购部门进货之后,把货物放在仓库里,生产部门从仓库中取出零件,并加工成产品,这样类比,可能更帮助我们理解,苍龙放的是物品, MQ 放的是消息,仓库负责存储物品,并转发物品,同样的,MQ 负责存储和转发消息
MQ 的作用有如下,包括但不限于(这里列举几个常见的作用,在不同场景下的应用,有不同的作用)
2.1 异步解耦
在一些业务流程中,一些操作可能会非常耗时,但并不需要即时返回结果,可以借助 MQ 把这些操作异步化(可回顾这期内容,介绍了解耦等名词【多线程】阻塞队列,解耦,就是依赖关系减弱)
举一个栗子,比如在用户注册的使用,有以下三个事情需要做:
1)用户信息校验
2)插入数据库(其实这个操作,用户的数据就已经在数据库了)
3)发送邮件(告诉用户,比如,恭喜你,注册成功等类似信息)
用户注册后发送注册短信或邮件通知,可以作为异步任务处理,而不必等待这些操作完成后才告知用户注册成功
2.2 流量削峰
在访问量剧增的情况下,应用仍然需要继续发挥作用,但是这样的突发流量并不常见,如果以能处理这类峰值为标准而投入资源,这无疑是巨大的资源浪费,使用 MQ 能够使关键组件支撑突发访问压力,不会因为突发流量而崩溃,比如秒杀活动或者促销活动,可以使用 MQ 来控制流量,将请求排队,系统再根据自己的处理能力逐步处理这些请求,使请求是平缓的速度,而不是猛增猛降
举一个生活中常见的栗子,比如某一些店面做热销活动或者周年庆的时候,肯定特别多人,流量特别大,店里的人完全忙不过来,如果请几个人帮忙,可以解决这个问题,但是,热销活动一过去,这些请来的人如何处理呢?此时,门店里也不需要这么多人手呀!这时,需要一个像 MQ 的东西,比如设置一个区域,进行排队,在流量大的时候,顶住压力,控制流量,门店再根据自己的处理能力,逐步处理这些请求~还有,比如在节假日,抢票的时候,流量特别大,尤其是在春节的时候,这个时候,可以有一个像 MQ 的东西进行处理,处理的时候,弹出一个界面,正在排队中…有两种结果,买票成功与买票失败,这样能够有效顶住流量剧增的压力
2.3 消息分发
当多个系统需要对同一数据做出响应的时候,可以使用 MQ 进行消息分发,比如支付成功之后,支付系统可以向 MQ 发送消息,其它系统订阅该消息,而不需要轮询数据库
举一个栗子,比如在购物的时候,下单成功,有以下几个事情需要做:
1)向商家发送通知
2)向平台财务部门发送通知
3)…
2.4 延迟通知
需要在特定时间后发送通知的场景中,可以使用 MQ 的延迟消息功能,比如,在电子商务平台中,如果用户下单后一定时间内未支付,可以使用延迟队列在超时后自动取消订单(可以把 MQ 想象一个仓库,暂时存储了这些消息,到一定时候进行转发~)
2.5 日志处理
MQ 消息队列还可以用于日志处理,例如,Kafka 等消息队列中间件可以接收并存储大量的日志数据,供日志处理应用进行订阅和消费,通过这种方式可以简化日志处理的架构,提高日志处理的效率和可靠性
…
3. 为什么选择 RabbitMQ?
可以看到,上述还提到了 Kafka 消息队列中间件,目前业界有很多的MQ产品,比如RabbitMQ,RocketMQ,ActiveMQ,Kafka,ZeroMQ等等,还记得 初识Redis 这期内容嘛,Redis 的初心其实是做消息队列的~ 这些消息队列,各有适应的场景,各有侧重点,没有好坏之分,这里谈论的是合不合适,在实际选择的时候,需要结合自身需求和MQ 产品特征,一起综合考虑。
这里介绍当下最主流的三种 MQ 产品:
- Kafka:Kafla 一开始的目的就是用于日志收集和传输,追求高吞吐量,性能卓越,单机吞吐量达到十万级,在日志领域比较成熟,功能较为简单,主要支持简单的 MQ 功能,假如现在有一个场景,有日志的采集需求,那么首选的消息队列是 Kafka!
- RocketMQ:RocketMQ 采用 Java 语言开发,由阿里巴巴开源,后捐赠给 Apache,它在设计的时候,借鉴了 Kafka,当然,做出了自己的改进,达到青出于蓝而胜于蓝的效果,经过多年双十一的洗礼,在可靠性、可用性以及稳定性方面都有着出色的表现,适用对于可靠性比较高,并且并发比较大的场景,比如互联网金融,但支持的客户端语言较少,并且社区活跃度一般
- RabbitMQ:采用 Erlang 语言开发,MQ 功能比较完备,且几乎支持所有的主流语言,开源提供的界面也十分的友好,性能较好,吞吐量能达到万级(Kafka 吞吐量达到十万级),社区活跃度比较高,比较适合中小型公司,数据量没有那么那么大,且并发没有那么高的场景
综上所述,RabbitMQ的综合能力较强,并且我们的项目没有那么那么大的高并发,RabbitMQ 社区比较活跃,同时RabbiMQ 管理界面友好,因此,本专栏学习 MQ 选择了 RabbitMQ ,小伙伴们~接下来我们主要一起来学习RabbitMQ的使用。
4. RabbitMQ 是什么?
可以通过 RabbitMQ 官网,更进一步了解
RabbitMQ 是采用 Erlang 语言实现AMQP(Advanced Message Queuing Protocol)高级消息队列协的消息中间件,它最初起源于金融系统领域,为了在分布式系统中存储和转发消息设计的~
RabbitMQ 发展到今天,已经被越来越多的人认可!尤其在互联网公司,已经有着大规模的场景应用,这和它的易用性、扩展性、可靠性和高可用性等方面密切相关。因此,本专栏,将带着小伙伴们一起深入了解一下 RabbitMQ~
💛💛💛本期内容回顾💛💛💛
✨✨✨本期内容到此结束啦~
下期内容预告:RabbitMQ 在 Ubuntu 上的安装