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

相关推荐
开心码农1号1 天前
mq是什么,常用mq的使用场景有哪些?
中间件·rabbitmq
Bohemian—Rhapsody1 天前
麒麟v10-arm架构部署rabbitmq
arm开发·架构·rabbitmq
總鑽風2 天前
数据一致性springcloud+rabbitmq+mysql+redis
mysql·spring cloud·rabbitmq
William Dawson2 天前
【实战分享】DTU设备高并发数据接入全流程(Redis + RabbitMQ + 数据库)
数据库·redis·rabbitmq
Albert Edison3 天前
【RabbitMQ】核心概念|工作流程|界面操作
分布式·rabbitmq·ruby
少许极端4 天前
消息队列5-RabbitMQ的高级特性和MQ的应用问题与解决方案-事务、消息分发的应用、幂等性保证、顺序性保证、消息积压的解决
分布式·消息队列·rabbitmq
Arva .4 天前
RabbitMQ
网络·分布式·rabbitmq
小江的记录本4 天前
【RabbitMQ】RabbitMQ核心知识体系全解(5大核心模块:Exchange类型、消息确认机制、死信队列、延迟队列、镜像队列)
java·前端·分布式·后端·spring·rabbitmq·mvc
fzb5QsS1p4 天前
Maomi.MQ 功能强大的 .NET RabbitMQ 消息队列通讯模型框架来了
rabbitmq·.net·ruby
zs宝来了5 天前
RabbitMQ 可靠性投递:持久化、确认机制与死信队列
rabbitmq·死信队列·持久化·可靠性·确认机制