RabbitMQ

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.用户发起退款,过了三天之后没有得到了处理则联系相关运营人员。

相关推荐
xiaolin033312 小时前
【RabbitMQ】- Channel和Delivery Tag机制
分布式·rabbitmq
计算机毕设定制辅导-无忧学长20 小时前
RabbitMQ 监控与调优实战指南(一)
分布式·rabbitmq
米粉030520 小时前
RabbitMQ 的异步化、解耦和流量削峰三大核心机制
分布式·rabbitmq
噼里啪啦啦.20 小时前
RabbitMQ在SpringBoot中的应用
spring boot·rabbitmq·java-rabbitmq
bubiyoushang88820 小时前
RabbitMQ如何保证消息可靠性
分布式·rabbitmq·ruby
smileNicky21 小时前
RabbitMQ 开机启动配置教程
分布式·rabbitmq
计算机毕设定制辅导-无忧学长1 天前
从 AMQP 到 RabbitMQ:核心组件设计与工作原理(一)
分布式·rabbitmq
米粉03051 天前
RabbitMQ 在解决数据库高并发问题中的定位和核心机制
数据库·分布式·rabbitmq
计算机毕设定制辅导-无忧学长1 天前
RabbitMQ 监控与调优实战指南(二)
分布式·rabbitmq·ruby
smileNicky2 天前
SpringBoot系列之RabbitMQ 实现订单超时未支付自动关闭功能
spring boot·rabbitmq·java-rabbitmq