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

RabbitMQ实现定时/延迟任务

方案选择实现方式(两种)

  1. 基于死信队列实现
  2. 基于插件实现

实现缺陷:不一定准时投送,当某一个时间堆积大量消息,那包会有延迟的

基于死信队列有这样一个场景,当我是基于消息设置过期时间,第一个投送到空队列的过期时间设置为1h,第二个设置为2m,由于是顺序队列,会导致第二个消息被阻塞,所以基于死信队列还是适合固定时间的延迟

那建议还是用插件实现,插件可以实现自定义消息过期时间,利用了一种类似于优先队列的数据结构(具体不了解),虽然依然是监控队首,但是内部消息是根据过期时间长短来决定队首消息的

实现原理

RabbitMQ 插件

rabbitmq_delayed_message_exchange 插件为每个消息维护独立的延迟计时器。当消息发送到使用该插件的交换器时,插件根据消息 headers 中设置的 x - delay 值启动计时任务,延迟时间到达后将消息路由到目标队列。它类似于利用一个优先队列来管理消息,按照延迟时间对消息排序,延迟时间短的消息优先处理。

对比RocketMQ

RocketMQ 采用延迟队列和定时任务调度实现定时消息。生产者发送的定时消息先被存储到特殊的延迟队列,这些延迟队列按预设的延迟级别划分,每个级别对应固定延迟时间。RocketMQ 的定时任务周期性检查延迟队列,当消息延迟时间到达,将其从延迟队列取出并发送到目标主题的正常队列。

http://www.dtcms.com/a/81040.html

相关文章:

  • 力扣 Hot 100 刷题记录 - 二叉搜索树中第 K 小的元素
  • Rust与Java对比
  • 【redis】AOF 的基本工作机制,顺序写入,文件同步,重写机制
  • lunar是一款无第三方依赖的公历 python调用
  • OSCP - Proving Grounds- CVE-2023-46818
  • 5-1 使用ECharts将MySQL数据库中的数据可视化
  • NLua 文档
  • Facebook的社交媒体伦理:信息传播与责任的平衡
  • Java集成MQTT和Kafka实现稳定、可靠、高性能的物联网消息处理系统
  • C语言未定义的标识符怎么解决
  • [创业之路-340]:投资的本质:前人栽树后人乘凉。企业固定资产投资
  • 论文速递| ECG去噪新方法:小波+ CNN提升可穿戴精度
  • Uni-App 双栏联动滚动组件开发详解 (电梯导航)
  • 【JVM】性能监控与调优概述篇
  • 面试提问:数仓设计不分层可以吗?
  • 关于 51 单片机显示多个数码管时出现残影
  • 基于springboot的高校心理教育辅导系统(019)
  • Django之旅:第二节--启动运行django
  • ffmpeg+ubuntu编译库(完整版本)
  • 基于javaweb的SpringBoot时装购物系统设计与实现(源码+文档+部署讲解)
  • 常见业务分析模型
  • 3D开发工具HOOPS SDK:赋能CAM软件开发的利器
  • 美团Leaf分布式ID生成器:使用详解与核心原理解析
  • debian12运行sql server2022(docker):导入.MDF .LDF文件到容器
  • PHP与Python无缝融合,开启跨语言开发新纪元
  • 内网安全-横向移动Kerberos 攻击SPN 扫描WinRMWinRSRDP
  • C++ std::bitset
  • 【MyDB】5-索引管理之4-单元测试
  • 详解string类+迭代器
  • 【万字总结】前端全方位性能优化指南(二)——AVIF/WebP格式转换、渐进式加载、WASM解码加速