RabbitMQ

RabbitMQ

面向修改关闭,面向拓展开放
在这里插入图片描述
优势:耦合度低,拓展性强;异步调用,性能好;故障隔离,下游服务不影响上有服务;缓存消息,流量削峰填谷
劣势:异步执行,时效性低;不确定下游是否执行成功。

SpringAMQP

配置
AMQP依赖
在这里插入图片描述
配置文件yml
在这里插入图片描述
入门案例
在这里插入图片描述
向队列发送消息
使用RabbitTemplate来发送消息
在这里插入图片描述
在类上添加@Component注解来标注,同时使用@RabbitListener注解在方法上来接收队列中的消息
在这里插入图片描述

Workqueue

在这里插入图片描述

解决消息堆积问题
在这里插入图片描述
在这里插入图片描述

交换机

在这里插入图片描述

Fanout:Fanout交换机会将消息广播到每一个跟其绑定的queue。

创建交换机并且与队列绑定
在这里插入图片描述
使用交换机转发消息
在这里插入图片描述

Direct将接收到的消息按照路由规则发送到指定的queue,因此成为定向路由

在这里插入图片描述

Topic交换机:与direct交换机类似,可以指定多个单词,并且以"."分割

在这里插入图片描述

消息转换器

在这里插入图片描述
配置JSON消息转换器
在这里插入图片描述

在这里插入图片描述

MQ高级

可靠性

生产者可靠性、MQ可靠性、消费者可靠性

发送者可靠性

生产者重连
在这里插入图片描述
生产者确认
在这里插入图片描述

在这里插入图片描述
生产者消息确认会提高可靠性,但是也会带来性能开销,影响MQ的性能,一般不开启。

MQ的可靠性

MQ消息是存储在内存中的,当MQ宕机,MQ中的消息将会丢失。
数据持久化
MQ存储在内存中的,当内存中存放满时,会持久化到磁盘中,持久到磁盘时会阻塞,其他所有的消息将会阻塞。
SpringAMQP默认发送持久化队列。

LazyQueue 惰性队列

在这里插入图片描述在这里插入图片描述

消费者

消费者确认机制

如果消息被消费者成功处理,则给MQ返回ACK,从队列中删除消息
如果消息处理失败,MQ则需要重新投递消息。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

消息处理失败机制

在这里插入图片描述

业务幂等性

幂等性:同一个业务执行一次和多次对业务影响是一致的。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

延时消息

生产者发送消息 指定一个时间,消费者不会立刻收到消息,而是在指定时间之后收到消息。

死信交换机

在这里插入图片描述
在这里插入图片描述

发送定时消息,消息过期成为死信消息
在这里插入图片描述

延迟消息插件
取消超时订单

在这里插入图片描述

RabbitMQ如何保证消息不丢失

在这里插入图片描述
1、生产者确认机制,publisher confirm机制来避免消息发送到MQ过程丢失,消息成功发送到MQ会返回一个ACK确认,失败重发。
2、消息持久化,消息默认存储在内存中,宕机后消息丢失。交换机持久化、队列持久化和消息持久化(AMQP默认时持久化的)
3、消费者确认机制为auto,消费者成功处理消息没有异常会返回一个ACK确认。
4、消费者重试机制,如果失败会再次发送,如果超过次数都失败会添加到一个专门异常交换机

RabbitMQ消息重复消费

在这里插入图片描述

RabbitMQ死信队列(延迟队列=死信交换机+TTL 或者 延迟队列插件)

用处:超时取消、限时优惠、定时发布
死信:1、消费者声明消息消费失败;2、消息过期没有被消费;3、消息队列已满。
如果对了配置了死信交换机那么队列中的死信会投递到死信交换机
在这里插入图片描述

消息堆积怎么及解决

1、增加消费者,提高消费速度
2、在消费者使用线程池,加快消息消费速度
3、使用惰性队列,扩大队列容积
惰性队列
在这里插入图片描述在这里插入图片描述

RabbitMQ高可用

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值