为什么要用消息队列?

一、没有消息队列会怎么样

假设用户在电商系统下单,一个下单动作,要同步调用很多个系统。这就会出现许多问题:
(1)系统之间耦合太重。 订单系统必须知道库存等这些服务都在哪里、怎么调用、是否成功。
订单系统依赖越来越多,一个下游服务改接口,上游也得改,新增一个业务动作,又得改订单代码。
(2)同步调用太慢。 如果下单必须等所有服务都执行完,用户就得一直等。
(3)高并发时容易把系统压垮。 比如双十一,同一时刻大量订单请求出现,大概率会宕机。
(4)一个服务挂了,那就整条链路都出问题。
mermaid-diagram

二、消息队列是什么

消息队列(Message Queue,MQ)本质上是一个存放消息的中间件。
生产者(Producer)把消息发给队列,消费者(Consumer)从队列里取消息处理。
引入消息队列后的流程就会变成:
mermaid-diagram (1)

三、消息队列的作用

(1)解耦
此时,就算整个链路中,某个MQ后的系统发生了问题,那其前面的业务也已经结束了,不会对后续造成影响。
无MR的情况:
无mr
有MR的情况:
有mr

(2)异步
也就是说不是所有事情都必须立刻做完。把非核心流程扔到MQ里异步处理,可以显著提升响应速度。
无MR的情况:
me
有MR的情况:
mermaid)

(3)削峰填谷
例如秒杀活动开始,1秒10万请求打进来,但数据库、库存服务每秒可能只能处理1万请求。那此时MQ先把请求或业务消息写入队列,前端请求快速返回“排队中”或“抢购处理中”,
MQ 作为缓冲区把高峰流量存起来,消费者按自身处理能力慢慢消费。

posted @ 2026-03-13 20:29  劳文池  阅读(0)  评论(0)    收藏  举报