【Node.js】RabbitMQ 延时消息

概述

在 RabbitMQ 中实现延迟消息通常需要借助插件(如 RabbitMQ 延迟队列插件),因为 RabbitMQ 本身不原生支持延迟消息。

延迟消息的一个典型场景是,当消息发布到队列后,等待一段时间再由消费者消费。这可以通过配置 TTL(Time-To-Live)和死信队列(DLX, Dead Letter Exchange)实现,或者通过 RabbitMQ 的延迟插件实现。

安装插件

下载地址

在这里插入图片描述

直接点击下载,然后将下载后的文件直接放入在 plugins 目录中:

在这里插入图片描述

启动插件:

rabbitmq-plugins enable rabbitmq_delayed_message_exchange

检查是否成功

打开可视化面板,访问 http://localhost:15672/#/ 账号密码都是 guest

发现新增了一个延迟队列类型 x-delayed-message:

在这里插入图片描述

延迟消息实现步骤

1. 创建一个延迟交换机

RabbitMQ 延迟插件允许我们使用一种特殊的交换机类型 x-delayed-message,可以设置延迟时间。

2. 发送延迟消息

通过设置消息属性中的 x-delay 来定义延迟时间。

3. 消费消息

消费者在消息到达指定的延迟时间后可以消费。

代码示例

1. 发送延迟消息的生产者代码
const amqp = require('amqplib');async function sendDelayedMessage() {const exchangeName = 'delayed_exchange';const routingKey = 'my_routing_key';const delayTime = 5000; // 延迟 5 秒// 连接到 RabbitMQ 服务器const connection = await amqp.connect('amqp://localhost');const channel = await connection.createChannel();// 声明延迟交换机await channel.assertExchange(exchangeName, 'x-delayed-message', {durable: true,arguments: {'x-delayed-type': 'direct', // 交换机的基础类型},});const message = 'Hello, this is a delayed message!';// 发送带有延迟的消息channel.publish(exchangeName, routingKey, Buffer.from(message), {headers: {'x-delay': delayTime, // 设置延迟时间},});console.log(`[x] Sent delayed message: "${message}" with delay: ${delayTime}ms`);// 关闭连接setTimeout(() => {connection.close();}, 1000);
}sendDelayedMessage().catch(console.error);
2. 消费延迟消息的消费者代码
const amqp = require('amqplib');async function consumeDelayedMessage() {const exchangeName = 'delayed_exchange';const queueName = 'delayed_queue';const routingKey = 'my_routing_key';// 连接到 RabbitMQ 服务器const connection = await amqp.connect('amqp://localhost');const channel = await connection.createChannel();// 声明队列并绑定到交换机await channel.assertQueue(queueName, { durable: true });await channel.bindQueue(queueName, exchangeName, routingKey);console.log('[*] Waiting for messages in delayed queue. To exit press CTRL+C');// 消费消息channel.consume(queueName, (msg) => {if (msg !== null) {console.log(`[x] Received delayed message: "${msg.content.toString()}"`);channel.ack(msg); // 手动确认消息}});
}consumeDelayedMessage().catch(console.error);
  1. 生产者部分

    • 使用 x-delayed-message 交换机,它允许消息在交换机中保留一段时间(通过 x-delay 属性),再发布到相应的队列。
    • 通过设置消息属性 headers: { 'x-delay': delayTime } 来指定延迟的时间。
  2. 消费者部分

    • 声明一个队列并将其绑定到延迟交换机,消费者从队列中接收消息。
    • 当消息的延迟时间到达后,消息被投递到队列并由消费者处理。

总结

使用延迟插件可以简化 RabbitMQ 中延迟消息的实现。

通过 x-delayed-message 交换机和 x-delay 属性,开发者可以灵活地控制消息的延迟发送时间。这种方式常用于需要延迟执行某些任务的场景,例如订单超时处理、延迟通知、预约外卖时延迟预约消息推送到商家等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/141302.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

带你0到1之QT编程:十一、掌握Containers容器艺术,一网打尽开发利器

此为QT编程的第十一谈!关注我,带你快速学习QT编程的学习路线! 每一篇的技术点都是很很重要!很重要!很重要!但不冗余! 我们通常采取总-分-总和生活化的讲解方式来阐述一个知识点! …

npm install报错,gyp verb `which` failed Error: not found: python

主要错误 gyp verb which failed Error: not found: python2 gyp ERR! configure error gyp ERR! stack Error: Cant find Python executable "python", you can set the PYTHON env variable. npm ERR! node-sass4.14.1 postinstall: node scripts/build.js 全部错…

几分钟学会搭建一个自己的外卖霸王餐系统

大家好,我是鲸天科技千千,大家都知道我是做小程序开发的,平时会给大家分享一些互联网相关的创业项目,感兴趣的可以跟我关注一下。 搭建一个首先就是要搭建一个自己的霸王餐小程序,我们自己的工作就是把这个小程序推广…

合肥鲸天科技的外卖会员卡系统有人做过吗?赚钱吗?

我们先来了解一下这个合肥鲸天科技,通过我在网上找到的资料和企业查询,这家公司还是很有实力的,合肥鲸天科技有限公司也是欢迎有合作的人到公司来进行一个考察和合作其他一些项目的。 外卖会员卡简介绍: 这个外卖会员卡&#xf…

地震勘探原理视频总结(1-6)

目录 一、为什么要学好这门课? 1.1 为什么要学这门课(为啥学)? 1.2 课程包括哪些主要内容(学什么)? 1.3 如何学好这门课(怎么学)? 二、石油的生成与聚集…

linux 操作系统下的cut命令介绍和使用案例

linux 操作系统下的cut命令介绍和使用案例 在 Linux 操作系统中,cut 命令是一个用于文本处理的命令行工具,允许用户从文件或管道数据中提取特定部分并将结果输出到标准输出 1. cut 命令简介 cut 命令主要用于从文本文件中提取特定的字段、字节或字符。…

01.AI推出Yi模型家族:多维度能力的展示

人工智能咨询培训老师叶梓 转载标明出处 01.AI公司提出了Yi模型家族,这一系列语言和多模态模型展示了强大的多维能力,旨在成为下一代计算平台,通过大规模数据和精心设计的训练过程,实现接近人类智能的模型。Yi模型家族基于6B和34…

CrossOver24.0.5破解版免费下载和永久激活图文教程,苹果电脑怎么玩《黑神话:悟空》

CrossOver24可以玩《黑神话:悟空》么?答案是可以的。 1、首先我们需要下载CrossOver24软件。 CrossOver24安装包夸克网盘链接:https://pan.quark.cn/s/35e64d746778 2、下载完成后,我们双击CrossOver.pkg开始安装,然…

【Vue】2

1 Vue 生命周期 Vue生命周期:一个 Vue 实例从 创建 到 销毁 的整个过程 创建(create)阶段:组件实例化时,初始化数据、事件、计算属性等挂载(mount)阶段:将模板渲染并挂载到 DOM 上更新(update)阶段:当数据发生变化时…

【Android】Room—数据库的基本操作

引言 在Android开发中,数据持久化是一个不可或缺的部分。随着应用的复杂度增加,选择合适的数据存储方式变得尤为重要。Room数据库作为Android Jetpack架构组件之一,提供了一种抽象层,使得开发者能够以更简洁、更安全的方式操作SQ…

八股(8)——Spring,SpringBoot

八股(8)——Spring,SpringBoot 基础1.Spring 是什么?特性?有哪些模块?Spring 有哪些特性呢? 2.Spring 有哪些模块呢?3.Spring 有哪些常用注解呢?Web 开发方面有哪些注解呢…

P5425 [USACO19OPEN] I Would Walk 500 Miles G

*原题链接* 很离谱的题。首先可以想到暴力连边&#xff0c;整个图为一个完全图&#xff0c;将所有的边选出来&#xff0c;然后从小到大一条条加入&#xff0c;当剩下集合数量 <K 的时候就结束。答案为加入的最后一条边的大小。如果用prim算法的话时间复杂度为。足以通过此题…

Python [ GUI编程自学 ],虽然但是,还是想出一个系列

本文主要介绍了GUI组件的其他常用组件部分&#xff1a;optionmenu选项菜单&#xff0c;scale滑块&#xff1b;颜色框、文件选择框&#xff0c;读取文件内容&#xff1b;简单对话框、通用消息、ttk子模块问题&#xff1b; 一系列GUI编程&#xff0c;有相关的专栏&#xff0c;欢迎…

【第36章】Spring Cloud之Seata分布式事务

文章目录 前言一、架构图1. 介绍2. 项目结构3. 功能描述 二、用例1. 准备1.1 系统表1.2 业务表1.3 初始化数据 2. 项目搭建2.1 项目结构2.2 主要依赖2.3 主要配置 三、1. 介绍 总结 前言 上一章我们已经搭建好了Seata服务端&#xff0c;这里我们根据官方案例来完成分布式事务。…

JMeter测试工具的简单了解

Apache JMeter 是一款开源的测试工具&#xff0c;主要用于对软件的性能进行测试。它最初被设计用于测试Web应用&#xff0c;但随着时间的推移&#xff0c;它的功能已经扩展到了其他测试领域。 可以应用到的场景 性能测试&#xff1a;评估应用程序在不同负载下的表现。负载测试…

自闭症学校康复寄宿:点亮每个孩子的希望

自闭症学校康复寄宿&#xff1a;在星贝育园&#xff0c;点亮每个孩子的希望 在自闭症儿童教育的广阔天地里&#xff0c;寄宿制学校以其独特的康复环境和全方位的支持体系&#xff0c;为这些特殊的孩子点亮了一盏希望之灯。广州的星贝育园自闭症儿童寄宿制学校&#xff0c;正是…

2024.9.15周报

一、题目信息 题目&#xff1a;Physics-informed neural networks for solving flow problems modeled by the 2D Shallow Water Equations without labeled data 链接&#xff1a;物理信息神经网络用于解决由二维浅水方程建模的流动问题&#xff0c;无需标记数据- ScienceDi…

【拦截导弹】

​ 题目 ​​ 题解 题解&#xff1a;1010. 拦截导弹&#xff08;dp与贪心&#xff09; - AcWing 我谈几点&#xff1a; 第一&#xff0c;由此复习了upper_bound和lower_bound函数 第二&#xff0c;由此学习了贪心方式求“最多分割不严格递减子序列的数目”和“最长不严格递…

【运维自动化-作业平台】脚本版本管理如何使用

在蓝鲸作业平台中&#xff0c;执行脚本是最常见的功能之一&#xff0c;支持快速录入脚本执行和引用脚本执行&#xff0c;引用的脚步即单独写好的&#xff0c;并且由定期管理更新的脚本&#xff0c;主要有业务脚本和公共脚本两种。快速脚本 手动页面编写的脚本&#xff0c;没有…

【工具推荐】ThinkphpGUI - 一款Thinkphp框架漏洞扫描集合工具,一键getshell。

0x00 工具介绍 ThinkphpGUI是一款Thinkphp框架漏洞扫描集合工具。 0x01 下载链接 ThinkphpGUI下载链接: 夸克网盘分享 0x02 功能介绍 ThinkPHP 5.0 RCE ThinkPHP 5.0.10 RCE ThinkPHP 5.0.22/5.1.29 RCE ThinkPHP 5.0.23 RCE ThinkPHP 5.0.24-5.1.30 RCE ThinkPHP 5 文…