专栏推荐
- 专门为Redis入门打造的专栏,包含Redis基础知识、基础命令、五大数据类型实战场景、key删除策略、内存淘汰机制、持久化机制、哨兵模式、主从复制、分布式锁等等内容。链接>>>>>>>>>《Redis从头学》
- SpringBoot实战相关专栏,包含SpringBoot过滤器、拦截器、AOP实现日志、整合Freemaker、整合Redis等等实战相关内容,多篇文章登入全站热榜、领域热榜、被技术社区收录。链接>>>>>>《SpringBoot实战》
🌟什么是消息队列
以下解释来源于百度百科:
“消息队列”是在消息的传输过程中保存消息的容器。
个人理解:
消息队列用来应用程序之间的消息传递。
图解:
🌟应用场景
消息队列作为消息中间件,可以用来解耦、异步、削峰。
解耦:生产者和消费者之间通过队列进行通信,降低系统间的耦合性。
异步:生产者发送消息后,仍旧可以执行其他任务,无需等待当前任务的执行状态。
削峰:消费者能力不足以跟上生产者的速度时,消息队列可以缓冲消息。
解耦
举例说明
比如说电商系统中,在下单系统与物流系统中引入消息队列MQ。下单系统将订单消息存入消息队列,物流系统负责监听消息队列得到商品订单消息。
传统模式:物流系统调用下单系统中的订单信息接口,假如下单系统故障则会导致发货失败。
MQ模式:下单系统无法访问时,物流系统可以监听队列中的订单消息。下单系统生产消息到队列中,仍可以执行其他任务。
异步
举例说明
比如说系统注册功能中,在用户注册时对用户异步发送注册邮件。
传统模式串行模式:在用户注册时,注册成功后将信息写入数据库,并对用户发送注册成功的邮件。响应总时间为60+70+70=200ms。
传统模式并行模式:在用户注册时,注册成功将信息写入数据库。发送邮件和发送短信并行执行。响应总时间为60+70=130ms。
消息队列模式:在用户注册时,注册成功将信息写入数据库。发送邮件和发送短信异步执行发送到消息队列。响应总时间为60+30=90ms。
削峰
举例说明:
大量用户发送请求,进行秒杀活动时。
传统模式:大量用户请求超过服务器请求负荷。
消息队列模式:服务器根据相关规则去消息队列读取相关请求。
🌟劣势分析
虽然上述两个小节对消息队列是什么以及应用场景有哪些?作出了具体解释并加以配图。但是它有什么缺点呢?
- 系统复杂性:引入消息队列会使系统更加的复杂,需要考虑各个组件间产生的影响
- 消息重复消费、丢失风险:需要保证消息的可靠性投递以及避免消息的重复消费,造成业务出现问题。
🌟写在最后
有关于图解消息队列是什么玩意儿?它的应用场景有哪些?到此就结束了。感谢大家的阅读,希望大家在评论区对此部分内容散发讨论,便于学到更多的知识。