- 为什么使用消息队列?
- 消息队列有什么优点和缺点?
- Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么区别,以及适合哪些场景?
- 为什么使用消息队列
消息队列的使用场景总结起来常见的有三个:解耦、异步、削峰。
- 解耦
例如 系统1发送数据给系统2,系统3,系统4,通过接口来调用,现在系统5需要数据,系统4不需要数据了。此刻我们就需要去a系统中重新编写和删除相应接口,耦合严重。
此刻还要关注一些问题,调用接口的系统挂了怎么办,要不要重发,怎么存储消息,这是个问题。
但是我们应用一个MQ,系统将数据发送到MQ中,让其他系统自己去调用消费,此时系统不在考虑给哪个系统发送数据,不需要维护这个代码,不需要考虑是否失败超时等情况。
总结:通过 MQ,Pub/Sub 发布订阅消息这么一个模型,系统彻底解耦了。
- 异步
A系统给每个系统发送接口数据都需要要损耗时间
系统在短时间内发送多个接口数据给MQ队列,其他系统直接去队列中消费消息,损耗时间极短,可以理解为将串行,变为并行发送的数据。
-
削峰
在系统访问高峰期的时候大量并行请求落到数据库中,可能直接导致mysql崩溃。
例如此刻有5k请求,数据库只能承受2k,我们可以将5k请求放到MQ中,然后系统每次拉取2k请求的数据,虽然请求大的时候会积压数据,但是避免的mysql奔溃,保持系统正常使用