当前位置: 首页 > article >正文

RabbitMQ的高级特性-延迟队列

延迟队列(Delayed Queue),即消息被发送以后, 并不想让消费者⽴刻拿到消息, ⽽是等待特定时间后,消费者才能拿到这个消息进⾏消费

应用场景

延迟队列的使⽤场景有很多, ⽐如:
1. 智能家居: ⽤⼾希望通过⼿机远程遥控家⾥的智能设备在指定的时间进⾏⼯作. 这时候就可以将⽤⼾指令发送到延迟队列, 当指令设定的时间到了再将指令推送到智能设备.
2. ⽇常管理: 预定会议后,需要在会议开始前⼗五分钟提醒参会⼈参加会议
3. ⽤⼾注册成功后, 7天后发送短信, 提⾼⽤⼾活跃度等

RabbitMQ本⾝没有直接⽀持延迟队列的的功能, 但是可以通过前⾯所介绍的TTL+死信队列的⽅式组合模拟出延迟队列的功能

假设⼀个应⽤中需要将每条消息都设置为10秒的延迟, ⽣产者通过 normal_exchange 这个交换器将发送的消息存储在 normal_queue 这个队列中. 消费者订阅的并⾮是 normal_queue 这个队列, ⽽
是 dlx_queue 这个队列. 当消息从 normal_queue 这个队列中过期之后被存⼊ dlx_queue 这个队列中,消费者就恰巧消费到了延迟10秒的这条消息

第一种:TTL+死信队列:

在消息中设置过期时间:

①发送两条消息, ⼀条消息10s后过期, 第⼆条20s后过期;延迟队列, 就是希望等待特定的时间之后, 消费者才能拿到这个消息. TTL刚好可以让消息延迟⼀段时间成为死信, 成为死信的消息会被投递到死信队列⾥, 这样消费者⼀直消费死信队列⾥的消息就可以了

②先发送20s过期数据, 再发送10s过期数据; 10s过期的消息, 也是在20s后才进⼊到死信队列.消息过期之后, 不⼀定会被⻢上丢弃. 因为RabbitMQ只会检查队⾸消息是否过期, 如果过期则丢到死对列. 此时就会造成⼀个问题, 如果第⼀个消息的延时时间很⻓, 第⼆个消息的延时时间很短, 那第一个消息并不会优先得到执⾏.

        在考虑使⽤TTL+死信队列实现延迟任务队列的时候, 需要确认业务上每个任务的延迟时间是⼀致的, 如果遇到不同的任务类型需要不同的延迟的话, 需要为每⼀种不同延迟时间的消息建⽴单独的消息队列.因此应该安装延迟插件


http://www.kler.cn/news/324270.html

相关文章:

  • 个人计算机与网络的安全
  • 初探shell与bash使用指南
  • spring cloud Gateway网关
  • 网络编程(12)——完善粘包处理操作(id字段)
  • 【最新】微信小程序连接onenet——stm32+esp8266+onenet实现查看温湿度,控制单片机
  • 探索CefSharp,Cefsharp浏览器能做自动填表和模拟登录
  • 长芯微LPQ76930锂电池组保护芯片完全P2P替代BQ76930
  • 江协科技STM32学习- P20 实验-TIM编码器接口测速
  • windows安装Redis以后配置远程访问
  • 深度学习框架的选择:深入比较PyTorch与TensorFlow
  • Type-C接口桌面显示器的优势
  • 计算机毕业设计Python+Spark知识图谱微博舆情预测 微博推荐系统 微博可视化 微博数据分析 微博大数据 微博爬虫 Hadoop 大数据毕业设计
  • New major version of npm available! 8.3.1 -> 10.8.3 报错
  • 数组增删改查操作
  • 深度学习500问——Chapter14:超参数调整(3)
  • 深度解读 2024 Gartner DevOps 魔力象限
  • Jupyter Notebook 更换主题
  • 【hot100-java】【柱状图中最大的矩形】
  • 2024.9.23-2024.9.29组会报告
  • 【HTTP 和 HTTPS详解】3
  • Chainlit集成LlamaIndex实现知识库高级检索(子问题查询引擎)
  • VR虚拟展厅可以在手机上打开吗?
  • 【2023工业3D异常检测文献】基于混合融合的多模态工业异常检测方法Multi-3D-Memory (M3DM)
  • 图灵完备-奇数个信号
  • C++ | Leetcode C++题解之第441题排列硬币
  • FPGA在汽车电子中应用-ADAS
  • 基于 Debian 的系统(如 Ubuntu)上安装、启动和配置 SSH 服务的指令流
  • Redis篇(应用案例 - 商户查询缓存)
  • 深度学习反向传播-过程举例
  • opencv实战项目二十九:GrabCut分割人像