# 为什么要用消息队列?
要回答这个问题主要从三个方面进行解释
1、解耦
2、异步
3、流量削峰填谷
# 解耦

如果是以图上的方式调用的话,可以发现是同步调用;在这种情况下一旦有系统发生问题比如 C 系统发生问题,整个链路就会不通。
那么如果我们在 B 系统和 C 系统之间加入一个消息中间间 MQ,这样只要消息发送到 mq,这个业务就可以算做结束了,就算 c 系统发生问题也不会出现问题,会在 C 系统修复之后再来处理消息队列中的问题。
# 异步

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

# 流量削峰

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