# 为什么要用消息队列?

要回答这个问题主要从三个方面进行解释

1、解耦

2、异步

3、流量削峰填谷

# 解耦

image-20230518141926296

如果是以图上的方式调用的话,可以发现是同步调用;在这种情况下一旦有系统发生问题比如 C 系统发生问题,整个链路就会不通。

那么如果我们在 B 系统和 C 系统之间加入一个消息中间间 MQ,这样只要消息发送到 mq,这个业务就可以算做结束了,就算 c 系统发生问题也不会出现问题,会在 C 系统修复之后再来处理消息队列中的问题。
image-20230518142330287

# 异步

image-20230518142727573

​ 可以看到原来的调用方式是必须 A 调 B,B 调 C 的方式;B 和 C 是同步调用的;再加入 MQ 后只要消息写入 MQ 之后,我们的业务就是结束了,后续就会由异步的方式来通知你。

image-20230518143115997

# 流量削峰

image-20230518143604620

作为 MQ,一般的吞吐量都会比较高,比如 kafka 动不动就是百万级的吞吐量,假如 C 系统的吞吐量有限只有 1W 的并发,如果业务遇到了 30W 的并发,有可能还是集中在 1 分钟;一般情况下如果没有消息中间件作为缓冲,C 系统会直接崩溃 ;我们加入消息中间件后 C 系统还是会以 1W 的并发量进行处理,但是会消耗时间进行空间的替换。