为什么要用MQ

为什么要用MQ

MQ的作用

首先在问为什么要用MQ的时候,其实就是在问MQ的作用

  • 异步:对于数据量大或者处理耗时长的操作,我们可以引入MQ 实现异步通信,减少客户端的等待,提升响应速度。
  • 解耦:对于改动影响大的系统之间,可以引入MQ 实现解耦,减少系统之间的直接依赖。
  • 削峰:对于会出现瞬间的流量峰值的系统,我们可以引入MQ 实现流量削峰,达到保护应用和数据库的目的

异步

同步:同步就是顺序执行,执行完在执行下一个,需要进行排队。

异步:异步就是彼此独立的,在等待某事件的过程中继续做自己的事,不需要等待这一事件完成后再工作。

实例

假设有以下这样的业务场景

如果采用传统模式,业务逻辑如下图:

整个业务逻辑均要走一篇,等待的时间太长。实际上短信,email这些业务并不会影响交易的状态,可以在支付成功后做异步处理,降低等待时间。这就得借助 消息中间件 来时间,加入 消息中间件 后的架构如下图示:

如上图调整架构,这样当订单支付成功后,发一个消息到 消息中间件,通知 积分,推送app,短信,email 这些服务去完成自己身的服务。 通过消息中间件,将部分同步服务转换为异步服务,降低了交易耗时,提高了用户体验。

解耦

场景:多个服务需要调用同一个服务时,使用消息队列做中转,实现解耦的作用,比如库存服务,优惠劵服务,都需要调用订单服务的时候,在中间使用消息队列来实现解耦。

削峰

至于流量削锋,比如线上的双十一秒杀,或者春节火车票抢购,会有大量的请求同时进来。这是服务承受的压力是平时的几十甚至上百倍,超过系统的最大出力能力,如果不能很好的处理这些流量,容易造成数据库的崩溃,导致服务不可用。 而如果加入 消息中间件 后,则能较好的处理这问题,方法如下: 将流量统一发送到 消息中间件 中业务系统根据自身的处理能力,异步均速处理消息,这样可以防止流量洪峰造成系统服务崩溃

场景

应用系统如果遇到系统请求流量的瞬间猛增,有可能会将系统压垮,可以使用消息队列将大量请求缓存起来,分散到很长一段时间来处理,这个可以大大提高系统的稳定性和用户体验。

相关推荐
颜淡慕潇26 分钟前
动态代理赋能:高效爬取沃尔玛海量商品信息与AI分析实战
人工智能·后端
半夏知半秋1 小时前
kcp学习-通用的kcp lua绑定
服务器·开发语言·笔记·后端·学习
hero.fei2 小时前
kaptcha 验证码生成工具在springboot中集成
java·spring boot·后端
w***76552 小时前
存储技术全景:从基础原理到未来趋势
spring boot·后端·mybatis
J_liaty2 小时前
基于ip2region.xdb数据库从IP获取到属地解析全攻略
java·网络·后端
且去填词3 小时前
深入理解 GMP 模型:Go 高并发的基石
开发语言·后端·学习·算法·面试·golang·go
FAFU_kyp4 小时前
Rust 模式匹配:match 与 if let 详解
开发语言·后端·rust
爬山算法5 小时前
Hibernate(46) Hibernate的配置文件如何加载?
java·后端·hibernate
青w韵6 小时前
SpringBoot3.x 升级到 SpringBoot 4.x,JDK17升级到JDK21
java·后端·spring
vx_bisheyuange6 小时前
基于SpringBoot的经方药食服务平台
java·spring boot·后端·毕业设计