概述
什么是队列
队列这个概念非常好理解,你可以把它想象为在食堂排队打饭,先来的先打,后来的人只能站末尾,不允许插队,先进者先出,这就是典型的队列。
队列的特定就是先进先出,先来的先出去
什么是消息队列
消息
- 消息是指在应用间传送的数据。
- 消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象。
消息队列
- 消息队列是一种应用间的通信方式,说白了就是存放消息的队列
- 消息发送后可以立即返回,由消息系统来确保消息的可靠传递。
- 消息发布者只管把消息发布到队列中,而不用管谁来取
- 消息使用者只管从队列中取消息而不管是谁发布的
- 这样发布者和使用者都不用知道对方的存在
- 常见的消息队列有 RabbitMQ、RocketMQ、Kafka
什么是 RabbitMQ ?
一场使用消息进行通信的高可用和数据安全的在线会议
这句话是RabbitMQ官网的描述
实际上,RabbitMQ 是一种消息通信方式,采用消息队列的形式,来将消息进行传递与发送,RabbitMQ 在通过消息队列传递消息时,可以保证消息的高可用性、消息中数据的安全性。
也就是说,RabbitMQ 是一种高可用且数据安全的消息通信中间件。
为什么要使用消息队列
- 消息队列也是针对特定问题有不同的使用场景,
- 任何技术的产生都是为了解决问题
- 消息队列主要用于异步处理、应用解耦、流量削峰三种场景。
异步处理
我们可以想象一种场景,我们的在网站注册新用户的时候:
- 填写注册信息后,
- 需要发送验证码,
- 用户收到验证码输入,要通过短信和邮件的方式验证是否用户本人注册,每个流程的请求响应耗时为 100ms,在同步的方式下总共需要耗时 300ms。
同步场景
异步场景
- 在异步场景下,我们不用等待邮件是否发送成功,只需写入注册信息后
- 开启两个异步任务,调用邮件合短信服务,两个服务同时完成,
- 最终响应只需要200ms
消息队列
- 使用消息队列后,我们直接发送注册消息后,系统直接返回,
- 至于后面的邮件合短信服务是否进行,我们不要要管理
- 反正他们最终一定会执行
- 最终只需要100ms
后面的邮件服务和短信服务,直接去消息队列中取消息消息后执行即可
应用解耦
上述异步请求的过程本质上也是应用解耦的过程,再模拟一个场景,用户下订单后,需要调用库存服务,如果库存服务升级,订单服务也跟着需要升级,耦合度比较高
引入消息队列后,只需要统一消息即可,实现高内聚,低耦合
流量削峰
- 互联网存在很多高并发场景,例如在 12306 抢购春运火车票,或者天猫的双十一和各类电商的秒杀秒杀活动,
- 系统在短时间收到大量的用户请求,数据库无法处理相对日常的数倍流量
- 数据库非常容易被压垮甚至宕机,会导致服务不可用。
- 为了避免这种情况发生,有熔断、降级、以及流量削峰等多种解决方案,消息队列是最常见的流量削峰方案。
- 业务代码从消息队列中拿到用户请求,再执行后续的业务逻辑。
- 消息队列在用户和业务逻辑中之间作为中间件模块
- 库存服务可以一条一条的处理消息,防止大量流量直接打到底层数据库。
最后
以上就是忧郁钥匙为你收集整理的消息队列基础的全部内容,希望文章能够帮你解决消息队列基础所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复