| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> 【架构师面试-消息队列-6】-MQ消息的积压与过期解决方案 -> 正文阅读 |
|
[Java知识库]【架构师面试-消息队列-6】-MQ消息的积压与过期解决方案 |
1:消息积压场景线上故障,几千万条数据在MQ里积压了7-8个小时。 这时,怎么处理呢?修复consumer端的BUG,然后等待8个小时消费完毕吗?肯定不行!一个消费者一秒是1000条,一秒3个消费者是3000条,一分钟是18万条,1000多万条。 如果你积压了上千万数据,即使消费者恢复,也需要2小时以上才能恢复。 解决方案临时扩容,加快消费速度 1. 先修复consumer的问题,确保其恢复消费速度,然后将现有consumer都停掉。 2. 临时建立好原先10倍或者20倍的queue数量 3. 然后写一个临时分发消息的consumer程序,这个程序部署上去消费积压的消息,消费之后不做耗时处理,直接均匀轮询写入临时建好分10数量的queue里面。 4. 紧接着征用10倍的机器来部署consumer,每一批consumer消费一个临时queue的消息。 5. 这种做法相当于临时将queue资源和consumer资源扩大10倍,以正常速度的10倍来消费消息。 6. 等快速消费完了之后,恢复原来的部署架构,重新用原来的consumer机器来消费消息。 2:消息过期消息过期、丢失,发送失败如何处理?任由消息消失? 死信队列:当消息成为Dead message后,可以被重新发送到另一个交换机,这个交换机就是DeadLetter Exchange(死信交换机 简写:DLX)。 消息成为死信的三种情况1. 队列消息长度到达限制; 2. 消费者拒接消息(basicNack),并且不把消息重新放回源队列,requeue=false; 3. 源队列存在消息过期设置,消息到达超时时间未被消费; 设置死信队列绑定死信交换机给队列设置参数: x-dead-letter-exchange 和 x-dead-letter-routing-key ? 3:死信队列案例目标演示消息队列中消息超时失效 实现步骤1. 在RabbitMQ管理控制台中,创建死信队列 deadQueue 2. 在RabbitMQ管理控制台中,创建死信交换机 deadExchange 3. 死信队列绑定死信交换机,路由键为 order.dead 4. 消息队列order.B绑定死信交换机 5. 向消息队列 order.B 中发送消息【消息队列order.B中的消息失效时间为5秒】 6. 在RabbitMQ管理控制台中,将消息队列 order.B 绑定到交换机 order_exchange 上 7. 等待5秒,消息队列order.B中的消息进入死信队列 实现过程1. 在RabbitMQ管理控制台中,创建死信队列 deadQueue 2. 在RabbitMQ管理控制台中,创建死信交换机 deadExchange 3. 死信队列绑定死信交换机,路由键为 order.dead 4. 删除 order.B 消息队列,重建之后绑定死信交换机 5. 向消息队列 order.B 中发送消息【消息队列order.B中的消息失效时间为5秒】 6. 等待5秒,消息队列order.B中的消息进入死信队列 4:小结1. 死信交换机和死信队列和普通的没有区别 2. 当消息成为死信后,如果该队列绑定了死信交换机,则消息会被死信交换机重新路由到死信队列 3. 消息成为死信的三种情况: ????????队列消息长度到达限制; ????????消费者拒接消费消息,并且不重回队列; ????????原队列存在消息过期设置,消息到达超时时间未被消费; |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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/24 3:22:38- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |