为什么要用MQ

为什么要用MQ

MQ的作用

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

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

异步

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

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

实例

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

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

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

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

解耦

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

削峰

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

场景

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

相关推荐
山岚的运维笔记4 小时前
SQL Server笔记 -- 第73章:排序/对行进行排序
数据库·笔记·后端·sql·microsoft·sqlserver
苍何4 小时前
豆包还能这么玩?附 13 大隐藏玩法,效率起飞(建议收藏)
后端
苍何4 小时前
Kimi 版 OpenClaw 来了,5000+ Skills 随便用,确实给力!
后端
百锦再5 小时前
Jenkins 全面精通指南:从入门到脚本大师
运维·后端·python·servlet·django·flask·jenkins
forestsea5 小时前
优雅终结启动顺序噩梦:ObjectProvider —— Spring 4.3 开始引入
java·后端·spring
小楼v5 小时前
⭐解锁RAG与Spring AI的实战应用(万字详细教学与完整步骤流程实践)
java·后端·rag·spring ai·ai大模型应用
毕设源码-小云学姐5 小时前
计算机毕业设计springboot医疗档案管理系统 基于 SpringBoot 的电子医疗档案管理系统的设计与实现 SpringBoot 框架下的医疗档案信息化管理系统开发
spring boot·后端·课程设计
那我掉的头发算什么5 小时前
【SpringBoot】一篇文章讲清楚拦截器所有知识
java·spring boot·后端·spring
Loo国昌5 小时前
【AI应用开发实战】 03_LangGraph运行时与状态图编排:从直接执行到图编排的演进之路
人工智能·后端·python·自然语言处理·prompt
普通网友8 小时前
PL/SQL语言的正则表达式
开发语言·后端·golang