| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> 二、RabbitMQ进阶 -> 正文阅读 |
|
[Java知识库]二、RabbitMQ进阶 |
1.RabbitMQ高级特性1.1消息的可靠投递????????在使用 RabbitMQ 的时候,作为消息发送方希望杜绝任何消息丢失或者投递失败场景。RabbitMQ 为我们提供了两种方式用来控制消息的投递可靠性模式。 ? ? ?
????????rabbitmq 整个消息投递的路径为: producer--->rabbitmq broker--->exchange--->queue--->consumer。
我们将利用这两个 callback 控制消息的可靠性投递。
????????小结:
????????使用channel
下列方法,完成事务控制:
1.2Consumer ACK????????ack指Acknowledge,确认。 表示消费端收到消息后的确认方式。 ????????有三种确认方式:
????????其中自动确认是指,当消息一旦被Consumer接收到,则自动确认收到,并将相应 message 从 RabbitMQ 的消息缓存中移除。但是在实际业务处理中,很可能消息接收到,业务处理出现异常,那么该消息就会丢失。如果设置了手动确认方式,则需要在业务处理成功后,调用channel.basicAck(),手动签收,如果出现异常,则调用channel.basicNack()方法,让其自动重新发送消息。 ? ? ? ? 总结:
消息可靠性总结:
1. 持久化:
????????? exchange要持久化
????????? queue要持久化
????????? message要持久化
2. 生产方确认Confirm;
3. 消费方确认Ack;
4. Broker高可用。
1.3消费端限流
????????请求瞬间增多,每秒5000个请求。
?消费端限流小结 :
1.4TTL
????????TTL 全称 Time To Live(存活时间/过期时间),当消息到达存活时间后,还没有被消费,会被自动清除。RabbitMQ可以对消息设置过期时间,也可以对整个队列(Queue)设置过期时间。
?????????总结:
1.5死信队列????????死信队列,英文缩写:DLX 。Dead Letter Exchange(死信交换机),当消息成为Dead message后,可以被重新发送到另一个交换机,这个交换机就是DLX。 ?
消息成为死信的三种情况:
????????1. 队列消息长度到达限制;
????????2. 消费者拒接消费消息,basicNack/basicReject,并且不把消息重新放入原目标队列,requeue=false;
????????3. 原队列存在消息过期设置,消息到达超时时间未被消费。
队列绑定死信交换机:
????????给队列设置参数: x-dead-letter-exchange 和 x-dead-letter-routing-key;
?总结:
1. 死信交换机和死信队列和普通的没有区别;
2. 当消息成为死信后,如果该队列绑定了死信交换机,则消息会被死信交换机重新路由到死信队
列;
3. 消息成为死信的三种情况:
????????1. 队列消息长度到达限制;
????????2. 消费者拒接消费消息,并且不重回队列;
????????3. 原队列存在消息过期设置,消息到达超时时间未被消费;
1.6延迟队列
????????延迟队列,即消息进入队列后不会立即被消费,只有到达指定时间后,才会被消费。
????????需求:?1. 下单后,30分钟未支付,取消订单,回滚库存;2. 新用户注册成功7天后,发送短信问候。
????????实现方式: 1. 定时器;2. 延迟队列。
?
????????很可惜,在RabbitMQ中并未提供延迟队列功能,但是可以使用:
TTL
+
死信队列
组合实现延迟队列的效果。
?总结:
????????1. 延迟队列 指消息进入队列后,可以被延迟一定时间,再进行消费。
????????2. RabbitMQ没有提供延迟队列功能,但是可以使用 : TTL + DLX 来实现延迟队列效果
2.RabbitMQ应用问题????????RabbitMQ应用问题 1. 消息可靠性保障 :消息补偿机制 ;2.消息幂等性保障 ;乐观锁解决方案。 需求: 100%确保消息发送成功。 2.1消息可靠性保障---消息补偿
????????
? 2.2 消息幂等性保障--乐观锁机制? 3.RabbitMQ集群搭建(省略) |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 21:36:58- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |