为什么要用MQ

为什么要用MQ

MQ的作用

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

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

异步

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

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

实例

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

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

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

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

解耦

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

削峰

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

场景

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

相关推荐
小码哥_常3 小时前
Spring Boot:别再重复造轮子,这些内置功能香麻了
后端
皮皮林5514 小时前
OpenFeign 首次调用卡 3 秒?八年老开发扒透 5 个坑,实战优化到 100ms!
后端
千寻girling5 小时前
《 Git 详细教程 》
前端·后端·面试
0xDevNull6 小时前
Linux 中 Nginx 代理 Redis 的详细教程
redis·后端
GetcharZp6 小时前
告别 Nginx 手动配置!这款 Go 语言开发的云原生网关,才是容器化时代的真香神器!
后端
RuoyiOffice7 小时前
SpringBoot+Vue3 企业考勤如何处理法定假期?节假日方案、调休补班与工作日判断链路拆解
spring boot·后端·vue·anti-design-vue·ruoyioffice·假期·人力
Vane17 小时前
从零开发一个AI插件,经历了什么?
人工智能·后端
952367 小时前
SpringBoot统一功能处理
java·spring boot·后端
rleS IONS8 小时前
SpringBoot中自定义Starter
java·spring boot·后端
DevilSeagull8 小时前
MySQL(2) 客户端工具和建库
开发语言·数据库·后端·mysql·服务