1. MQ 是什么?
在互联网中,会经常使用 MQ 来作为消息通信服务,我们一起来看一下什么是 MQ 吧!
1.1 MQ 本质
【MQ】(Message queue),消息队列,字面意思来看,本质是一个队列,FIFO先进先出,但这里的消息队列,只不过队列中存放的是消息,消息可以非常简单,也可以非常复杂
1.2 系统间通信
MQ 多用于分布式系统之间进行通信(系统通信,相当于数据传输)
这里补充介绍一下,系统之间的调用通常有两种方式:
-
同步通信:直接调用对方的服务,数据从一端发出后立即就可以到达另一端
-
异步通信:数据从一端发出后,先进入一个容器进行临时存储,当达到某种条件后,再由这个容器发送给另一端(这个容器的一个具体实现就是MQ)
2. MQ的作用是什么?
MQ 的工作是:接收并转发消息
可以把 MQ 消息队列想象成一个仓库,采购部门进货之后,把货物放在仓库里,生产部门从仓库中取出零件,并加工成产品,这样类比,可能更帮助我们理解,仓库放的是物品, MQ 放的是消息,仓库负责存储物品,并转发物品,同样的,MQ 负责存储和转发消息
2.1 异步解耦
在一些业务流程中,一些操作可能会非常耗时,但并不需要即时返回结果,可以借助 MQ 把这些操作异步化(可回顾这期内容,介绍了解耦等名词【多线程】阻塞队列,解耦,就是依赖关系减弱)
举一个栗子,比如在用户注册的使用,有以下三个事情需要做:
1)用户信息校验
2)插入数据库(其实这个操作,用户的数据就已经在数据库了)
3)发送邮件(告诉用户,比如,恭喜你,注册成功等类似信息)
2.2 流量削峰
在访问量剧增的情况下,应用仍然需要继续发挥作用,但是这样的突发流量并不常见,如果以能处理这类峰值为标准而投入资源,这无疑是巨大的资源浪费,使用 MQ 能够使关键组件支撑突发访问压力,不会因为突发流量而崩溃,比如秒杀活动或者促销活动,可以使用 MQ 来控制流量,将请求排队,系统再根据自己的处理能力逐步处理这些请求,使请求是平缓的速度,而不是猛增猛降
2.3 消息分发
当多个系统需要对同一数据做出响应的时候,可以使用 MQ 进行消息分发,比如支付成功之后,支付系统可以向 MQ 发送消息,其它系统订阅该消息,而不需要轮询数据库
举一个栗子,比如在购物的时候,下单成功,有以下几个事情需要做:
1)向商家发送通知
2)向平台财务部门发送通知
2.4 延迟通知
需要在特定时间后发送通知的场景中,可以使用 MQ 的延迟消息功能,比如,在电子商务平台中,如果用户下单后一定时间内未支付,可以使用延迟队列在超时后自动取消订单(可以把 MQ 想象一个仓库,暂时存储了这些消息,到一定时候进行转发~)
2.5 日志处理
MQ 消息队列还可以用于日志处理,例如,Kafka 等消息队列中间件可以接收并存储大量的日志数据,供日志处理应用进行订阅和消费,通过这种方式可以简化日志处理的架构,提高日志处理的效率和可靠性
3. 为什么选择 RabbitMQ?
RabbitMQ的综合能力较强,并且我们的项目没有那么那么大的高并发,RabbitMQ 社区比较活跃,同时RabbiMQ 管理界面友好,因此,本专栏学习 MQ 选择了 RabbitMQ ,小伙伴们~接下来我们主要一起来学习RabbitMQ的使用。
4. RabbitMQ 是什么?
可以通过 RabbitMQ 官网,更进一步了解
RabbitMQ 是采用 Erlang 语言实现AMQP(Advanced Message Queuing Protocol)高级消息队列协的消息中间件,它最初起源于金融系统领域,为了在分布式系统中存储和转发消息设计的~
💛💛💛本期内容回顾💛💛💛