MQ(消息队列) 1、为什么使用MQ MQ可以 解耦 、 异步 、 削峰 。 解耦场景:使用Pub/Sub 发布订阅模型,可以一个系统发布消息,多个系统订阅消费。 异步场景:用户一个请求,后台需要调用多个服务完成,可以将每一个服务放入一个队列,分别异步执行。 削峰:一般Mysql 每次可处理2k左右请求,如果请求量突然暴增,DB将承受不住,甚至宕机,将请求放入队列,根据DB处理能力,排队消费。 引入MQ面对的问题: 系统可用性降低:MQ服务挂了,系统也就挂了 系统复杂度提高:如何保证消费不重复,消息不丢失,消息传递的顺序行,都需要解决 一致性问题出现:A系统处理成功,B系统没有处理成功,咋办 各消息队列对比: 特性 ActiveMQ RabbitMQ RocketMQ Kafka 单机吞吐量 万级,比 RocketMQ、Kafka 低一个数量级 同 ActiveMQ 10 万级,支撑高吞吐 10 万级,高吞吐,一般配合大数据类的系统来进行实时数据计算、日志采集等场景 topic 数量对吞吐量的影响 topic 可以达到几百/几千的级别,吞吐量会有较小幅度的下降,这是 RocketMQ 的一大优势,在同等机器下,可以支撑大量的 topic topic 从几十到几百个时候,吞吐量会大幅度下降,在同等机器下,Kafka 尽量保证 topic 数量不要过多,如果要支撑大规模的 topic