消息队列基础

消息队列是一种应用间的通信方式,采用FIFO原则,如RabbitMQ,确保高可用和数据安全。其主要用途包括异步处理以减少响应时间,应用解耦以降低耦合度,以及流量削峰以应对高并发场景。异步处理能将注册流程从同步的300ms降至100ms,应用解耦则允许独立升级服务,而流量削峰通过消息队列缓冲瞬时大量请求,保护底层数据库。

什么是队列

队列这个概念非常好理解,你可以把它想象为在食堂排队打饭,先来的先打,后来的人只能站末尾,不允许插队,先进者先出,这就是典型的队列。
在这里插入图片描述
队列的特定就是先进先出,先来的先出去

什么是消息队列

消息

  • 消息是指在应用间传送的数据。
  • 消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象。

消息队列

  • 消息队列是一种应用间的通信方式,说白了就是存放消息的队列
  • 消息发送后可以立即返回,由消息系统来确保消息的可靠传递。
  • 消息发布者只管把消息发布到队列中,而不用管谁来取
  • 消息使用者只管从队列中取消息而不管是谁发布的
  • 这样发布者和使用者都不用知道对方的存在
  • 常见的消息队列有 RabbitMQ、RocketMQ、Kafka
    在这里插入图片描述

什么是 RabbitMQ ?

一场使用消息进行通信的高可用和数据安全的在线会议
这句话是RabbitMQ官网的描述

实际上,RabbitMQ 是一种消息通信方式,采用消息队列的形式,来将消息进行传递与发送,RabbitMQ 在通过消息队列传递消息时,可以保证消息的高可用性、消息中数据的安全性。

也就是说,RabbitMQ 是一种高可用且数据安全的消息通信中间件。

为什么要使用消息队列

  • 消息队列也是针对特定问题有不同的使用场景,
  • 任何技术的产生都是为了解决问题
  • 消息队列主要用于异步处理、应用解耦、流量削峰三种场景。

异步处理

我们可以想象一种场景,我们的在网站注册新用户的时候:

  • 填写注册信息后,
  • 需要发送验证码,
  • 用户收到验证码输入,要通过短信和邮件的方式验证是否用户本人注册,每个流程的请求响应耗时为 100ms,在同步的方式下总共需要耗时 300ms。
同步场景

在这里插入图片描述

异步场景
  • 在异步场景下,我们不用等待邮件是否发送成功,只需写入注册信息后
  • 开启两个异步任务,调用邮件合短信服务,两个服务同时完成,
  • 最终响应只需要200ms
    在这里插入图片描述
消息队列
  • 使用消息队列后,我们直接发送注册消息后,系统直接返回,
  • 至于后面的邮件合短信服务是否进行,我们不要要管理
  • 反正他们最终一定会执行
  • 最终只需要100ms
    在这里插入图片描述

后面的邮件服务和短信服务,直接去消息队列中取消息消息后执行即可

应用解耦

上述异步请求的过程本质上也是应用解耦的过程,再模拟一个场景,用户下订单后,需要调用库存服务,如果库存服务升级,订单服务也跟着需要升级,耦合度比较高

在这里插入图片描述

引入消息队列后,只需要统一消息即可,实现高内聚,低耦合在这里插入图片描述

流量削峰

  • 互联网存在很多高并发场景,例如在 12306 抢购春运火车票,或者天猫的双十一和各类电商的秒杀秒杀活动,
  • 系统在短时间收到大量的用户请求,数据库无法处理相对日常的数倍流量
  • 数据库非常容易被压垮甚至宕机,会导致服务不可用。
  • 为了避免这种情况发生,有熔断、降级、以及流量削峰等多种解决方案,消息队列是最常见的流量削峰方案。

在这里插入图片描述

  • 业务代码从消息队列中拿到用户请求,再执行后续的业务逻辑。
  • 消息队列在用户和业务逻辑中之间作为中间件模块
  • 库存服务可以一条一条的处理消息,防止大量流量直接打到底层数据库。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值