RabbitMQ实现定时/延迟任务

devtools/2025/3/18 15:08:58/

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

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

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

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

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

实现原理

RabbitMQ 插件

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

对比RocketMQ

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


http://www.ppmy.cn/devtools/168087.html

相关文章

《Python实战进阶》No23: 使用 Selenium 自动化浏览器操作

No23: 使用 Selenium 自动化浏览器操作 摘要 Selenium 是自动化浏览器操作的“瑞士军刀”,可模拟人类行为操作网页,适用于爬虫、测试、重复任务自动化等场景。本集通过代码驱动实战,从安装配置到复杂交互,带你掌握 Selenium 的核…

市场监管总局升级12315平台 专项整治四大市场顽疾保障消费安全

大湾区经济网湾区财经讯,在今天下午举行的国务院新闻办新闻发布会上,市场监管总局负责人表示,将开展食品非法添加、假冒伪劣、价格欺诈、虚假宣传四大领域专项整治行动,并强化缺陷产品召回监管,全面保障消费者“安全消…

【MySQL】多表查询(笛卡尔积现象,联合查询、内连接、左外连接、右外连接、子查询)-通过练习快速掌握法

在DQL的基础查询中,我们已经学过了多表查询的一种:联合查询(union)。本文我们将系统的讲解多表查询。 笛卡尔积现象 首先,我们想要查询emp表和stu表两个表,按照我们之前的知识栈,我们直接使用…

行为模式---访问者模式

概念 访问者模式是设计模式行为模式的一种,主要是用于将算法和所作用的对象隔离开来。 访问者模式通过将算法封装在访问者对象中,使得算法可以独立于对象结构变化。对象结构中的每个元素都接受访问者对象,并将自身传递给访问者对象&#xf…

一般机器学习有哪些算法?

传统的机器学习算法主要依赖统计学和优化方法,不依赖深层神经网络,通常具有较高的可解释性且适用于中小规模数据集。以下是经典的传统机器学习算法分类及代表性模型: 一、监督学习(Supervised Learning) 1. 回归&…

Muon: An optimizer for hidden layers in neural networks

引言 在深度学习领域,优化算法对模型训练效率和性能起着关键作用。从经典的随机梯度下降 (SGD) 及其动量法,到自适应优化方法 Adam/AdamW 等,一系列优化器大大加速了神经网络的收敛。然而,随着模型规模和数据量的爆炸式增长&…

第一节:关于数组的算法(python版)

目录 一、存储方式 二、二分查找 三:数组的算法操作:双指针算法 四、数组操作:滑动窗口 视频讲解地址:动态-哔哩哔哩 一、存储方式 在python中的list本质是动态数组,支持自动扩容。还有一个numpy数组,…

京东Taro小程序原生端接入操作

首先对接之前先看文档,看是需要接入mPass平台,还是仅限在原生端接入Taro小程序; 本文章是仅限接入Taro小程序,接下来废话不多少,我们开始新的接入流程: 首先将这几个文件导入到当前项目中: 还…