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

RabbitMQ实现定时/延迟任务

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

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

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

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

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

实现原理

RabbitMQ 插件

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

对比RocketMQ

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


http://www.kler.cn/a/588700.html

相关文章:

  • ES6(2) 函数详解
  • 【RNN神经网络】序列模型与RNN神经网络
  • 易境通集运系统:拼团模式重构社交化集运新生态
  • MobileNet家族:从v1到v4的架构演进与发展历程
  • Vue源码深度解析:从2.x到3.x的架构演进与核心原理剖析
  • pycharm配置镜像源【pycharm最新版(23.2.5及以上)方法】
  • 记第一次跟踪seatunnel的任务运行过程三——解析配置的具体方法getLogicalDag
  • 【vue3学习笔记】(第147-149节)vue3响应式原理_Reflect;reactive对比ref;setup的两个注意点
  • Solana
  • 《Python深度学习》第二讲:深度学习的数学基础
  • C#—【在不同的场景该用哪种线程?】
  • Chrome 浏览器的很多扩展不能用了
  • mysql数据库中多张表导出成excel方式
  • Bash语言的集合
  • 【NLP】10. 机器学习模型性能评估指标(含多类别情况), ROC,PRC
  • 嵌入式Zephyr RTOS面试题及参考答案
  • Spring Boot Actuator 详解:让你的应用可监控、可管理、更健壮
  • Qt中的 #include “xxxx.moc“ 说明
  • vscode关闭仓库后如何打开
  • go数据结构笔记