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

相关推荐
夜影风2 天前
RabbitMQ核心架构与应用
分布式·架构·rabbitmq
斯普信专业组3 天前
Rabbitmq+STS+discovery_k8s +localpv部署排坑详解
分布式·kubernetes·rabbitmq
泰勒疯狂展开3 天前
Java研学-RabbitMQ(八)
java·rabbitmq·java-rabbitmq
Monly213 天前
RabbitMQ:Windows版本安装部署
rabbitmq
Linux运维技术栈3 天前
解决程序连不上RabbitMQ:Attempting to connect to/access to vhost虚拟主机挂了的排错与恢复
分布式·rabbitmq·ruby
在未来等你3 天前
RabbitMQ面试精讲 Day 19:网络调优与连接池管理
性能优化·消息队列·rabbitmq·高并发·连接池·面试准备·网络调优
泰勒疯狂展开4 天前
Java研学-RabbitMQ(六)
java·rabbitmq·java-rabbitmq
dessler5 天前
RabbitMQ-知识技能图谱(总结篇)
分布式·rabbitmq
在未来等你5 天前
RabbitMQ面试精讲 Day 20:RabbitMQ压测与性能评估
性能优化·消息队列·rabbitmq·压力测试·性能测试·面试题
创码小奇客5 天前
架构师选型圣经:SpringBoot 集成三大消息中间件的终极对决
rabbitmq·rocketmq·trae