为什么要用MQ

为什么要用MQ

MQ的作用

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

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

异步

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

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

实例

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

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

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

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

解耦

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

削峰

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

场景

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

相关推荐
没差c40 分钟前
springboot集成flyway
java·spring boot·后端
三水不滴42 分钟前
Redis 过期删除与内存淘汰机制
数据库·经验分享·redis·笔记·后端·缓存
笨蛋不要掉眼泪1 小时前
Spring Boot集成LangChain4j:与大模型对话的极速入门
java·人工智能·后端·spring·langchain
sheji34164 小时前
【开题答辩全过程】以 基于SpringBoot的疗养院管理系统的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端
短剑重铸之日4 小时前
《设计模式》第六篇:装饰器模式
java·后端·设计模式·装饰器模式
码界奇点6 小时前
基于Flask与OpenSSL的自签证书管理系统设计与实现
后端·python·flask·毕业设计·飞书·源代码管理
代码匠心7 小时前
从零开始学Flink:状态管理与容错机制
java·大数据·后端·flink·大数据处理
分享牛7 小时前
LangChain4j从入门到精通-11-结构化输出
后端·python·flask
知识即是力量ol8 小时前
在客户端直接上传文件到OSS
java·后端·客户端·阿里云oss·客户端直传
闻哥8 小时前
深入理解 Spring @Conditional 注解:原理与实战
java·jvm·后端·python·spring