1.什么MQ?
MQ=消息队列
消息队列:存放内容消息的队列,是一种进程的通信机制,用于上下游传递消息。
2.为什么要用MQ?
1.流量消峰:假设一个系统在高峰的时候,每秒访问高于处理能力,这个时候系统是处理不了这么多的,可以通过消息队列的话可以作为缓冲,把每一秒处理的订单分成一段时间来处理。
2.应用解耦:当应用中有订单系统,库存系统,物流系统,支付系统,当一个用户创建一个订单,如果耦合的调用支付,库存,物流系统,当某个系统处理问题,会导致下单失败,但是如果转为基于消息队列方式后,问题就会减少很多,如果物流系统出现问题,需要修复,在这个时间中,物流系统处理内存会被缓存在消息队列,用户可正常下单,等物流系统回复之后,就继续处理订单信息,而这个过程中用户感受不到物流系统出现异常。
3.异步处理:A服务调用B服务后,只需要监听B服务处理完消息,当B服务处理完,会发送一条消息给MQ,MQ会将消息发送给A服务。
3.MQ分类?
KafKa
优点:为大数据而生,吞吐量高,多运用大数据领域的实时计算和日志采集场景。
缺点:社区跟新慢。
RabbitMQ
优点:JAVA语言实现,单机吞吐量十万级,支持10亿级别消息堆积。
缺点:支持的客户端不多。
4.MQ的核心部分?
1.消费者:负责消费数据
2.生产者:负责生成数据
3.交换机:接受来自生产者的消息,并将消息推送到队列中。
4.队列:存储消息
5.MQ六大模式?
1.简单模式:一个生产者向一个队列发送消息,该队列负责消费消息,这也是最简单模式。
2.工作模式:一个生产者会对应一个消息队列,一个消息队列对应多个工作线程(消费者)
3.发布/订阅模式
4.路由模式
5.主题模式
6.发布确认模式
6.RabbitMQ工作原理

7.消息实现持久化
由于消息从生成者发送过来就会删除,因此我引入了应答机制,只有消费者成功应答之后,生产者才会将数据删除。
8.死信和死信队列
死信:无法被消费的消息。
死信队列:无法被消费的消息被流转到这个队列。
产生死信的原因:
1.消息TTL(最大存活时间)过期。
2.队列达到最大长度。
3.消息被拒绝。
9.延迟队列
延迟队列:延时队列就是在存放需要指定时间被处理的元素队列,生产者发送消息到队列,在队列经过一定的延迟时间进入死信队列,从而在被消费者消费。
使用场景:
1.订单在十分钟之内位在支付自动取消。
2.用户发起退款,过了三天之后没有得到了处理则联系相关运营人员。