Nodejs 第七十七章(MQ高级)

news2024/9/22 5:56:16

在这里插入图片描述

MQ介绍和基本使用在75章介绍过了,不再重复

MQ高级用法-延时消息

什么是延时消息?

Producer 将消息发送到 MQ 服务端,但并不期望这条消息立马投递,而是延迟一定时间后才投递到 Consumer 进行消费,该消息即延时消息

插件安装

RabbitMQ延迟队列插件下载

下载地址 https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases

安装

把下载好的文件拖到你的rabbitMQ下面的plugins目录里面

#举例
D:\Applaaction\rabbitmq_server-3.13.0\plugins

启用插件

执行下面的命令

rabbitmq-plugins enable rabbitmq_delayed_message_exchange

检查是否成功

打开可视化面板(可视化面板如何安装75章有讲)

访问 http://localhost:15672/#/ 账号密码都是 guest

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

代码编写

应用场景

现在是2024-06-06 半夜1.08分,我选择外卖预约中午的11.00 - 11.20 左右的外卖,我如果选择下单,那么这个单不会立马推送到商家的客户端里面,而是存放到消息队列,使用延时消息,在差不多的时间段例如10.30左右才会把这个单推送到商家的客户端,这样商家出餐10分钟,骑手送20-30分钟左右,送过来就差不多11点左右

生产者

发布订阅模式在上一章已经讲过了不懂去看上一章

  1. 我们使用新增的延时类型切换一下type类型 x-delayed-message
  2. 连接交换机的时候增加arguments对象 添加 x-delayed-type 目标交换机类型 这儿使用direct
  3. 发布消息的时候增加头部信息 x-delay:延时的时间(毫秒)
import amqplib from 'amqplib'
//1.连接MQ
const connection = await amqplib.connect('amqp://localhost:5672')
//2.创建一个通道
const channel = await connection.createChannel()
//3.创建交换机
/**
 * @param {string} exchange 交换机名称 随便写
 * @param {string} type 交换机类型 direct fanout topic headers x-delayed-message
 * @param {options} options 可选配置项
 */
//这个方法就是说如果你创建过这个交换机就不会再创建了 如果没有创建过这个交换机就会创建
await channel.assertExchange('delayed-1', 'x-delayed-message',{
    arguments:{
        'x-delayed-type': 'direct' //目标交换机类型
    }
})


//4.发送消息
/**
 * @param {string} exchange 要发送到交换机的名称
 * @param {string} routingKey 匹配路由的key
 * @param {Buffer} buffer 要发送的消息
 * @param {options} options 可选配置项
 */
channel.publish('delayed-1', 'time', Buffer.from('延时消息'),{
    headers:{
        'x-delay': 10000 //延时 10秒
    }
})
//断开连接
await channel.close()
await connection.close()
process.exit(0)

消费者

import amqplib from 'amqplib'
//1.连接MQ
const connection = await amqplib.connect('amqp://localhost:5672')
//2.创建一个通道
const channel = await connection.createChannel()
//3.创建交换机
await channel.assertExchange('delayed-1', 'x-delayed-message',{
    arguments:{
        'x-delayed-type': 'direct' //目标交换机类型
    }
})
//4.创建一个队列
const { queue } = await channel.assertQueue('queue-1')
//5.交换机跟队列要绑定
/**
 * @param {string} queue 队列名称
 * @param {string} exchange 交换机名称
 * @param {string} routingKey 匹配路由的key
 */
channel.bindQueue(queue, 'delayed-1', 'time')
//6.消费消息
channel.consume(queue, (msg) => {
    console.log(msg.content.toString())
}, {
    noAck: true
})

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

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

相关文章

el-tree回显复选框时半选中和全选中的树

项目需求如下:当我点击“编辑”后,需要在tree树上全勾中和半勾中选项,由于后端接口返回的tree树是含了父级节点id的数组集合,所以我们回显时需要处理好这个全勾中和半勾中的问题。 主要思路如下,我们通过setData方法获…

服务器数据恢复—热备盘未完全启用导致raid5阵列崩溃的数据恢复案例

服务器存储故障: 一台EMC某型号存储由于存储中raid5阵列出现故障导致服务器崩溃,由于数据涉密,需要工程师到现场恢复数据。 服务器数据恢复工程师到现场后对数据进行检测,经过检测发现服务器崩溃是由于raid中某些硬盘掉线所导致。…

【深度学习】数竹签演示软件系统

往期文章列表: 【YOLO深度学习系列】图像分类、物体检测、实例分割、物体追踪、姿态估计、定向边框检测演示系统【含源码】 【深度学习】物体检测/实例分割/物体追踪/姿态估计/定向边框/图像分类检测演示系统【含源码】 【深度学习】YOLOV8数据标注及模型训练方法整…

meilisearch的Managing API keys,自己趟过的坑

Elasticsearch 做为老牌搜索引擎,功能基本满足,但复杂,重量级,适合大数据量。 MeiliSearch 设计目标针对数据在 500GB 左右的搜索需求,极快,单文件,超轻量。 所以,对于中小型项目来说…

电商比价系统的搭建需要哪些方面着手准备?

搭建一个淘宝/京东比价系统所需的时间取决于多个因素,包括但不限于系统的复杂度、开发团队的规模与经验、数据源获取的难易程度、技术选型等。以下是一个大致的时间估计和考虑因素: 需求分析与设计: 确定系统的主要功能,如商品搜…

Python基于 GPU 的机器学习算法库之cuml使用详解

概要 在大数据和机器学习的时代,高效的数据处理和模型训练变得尤为重要。传统的 CPU 计算方式在处理大规模数据时往往显得力不从心,而 GPU 的并行计算能力为此提供了一种解决方案。cuml 是 RAPIDS AI 项目的一部分,它提供了一组基于 GPU 的机器学习算法,能够极大地提升数据…

【数据结构与算法】哈夫曼树与哈夫曼编码

文章目录 哈夫曼树(最优二叉树)定义举个🌰(WPL的计算) 哈夫曼树的构造(最优二叉树的构造)举个🌰 哈夫曼编码定义构造 哈夫曼树(最优二叉树) 在介绍哈夫曼树之…

中间件复习之-分布式存储系统

单机存储系统介绍 存储引擎:存储系统的发动机,提供数据的增、删、改、查能力,直接决定存储系统的功能(支持怎么样的查询,锁能锁到什么程度)和性能(增删改查速度)。 性能因素 写入方…

1939springboot VUE 高等院校求职信息管理系统开发mysql数据库web结构java编程计算机网页源码maven项目前后端分离

一、源码特点 springboot VUE高等院校信息(求职)管理系统是一套完善的完整信息管理类型系统 前后端分离,结合springboot框架和VUE完成本系统,对理解vue java编程开发语言有帮助系统采用springboot框架(MVC模式开发&a…

Spring Cloud全家桶(上)【Nacos、OpenFeign、LoadBalancer、GateWay、金丝雀灰色发布】

0.零基础入门微服务实战课 1.微服务和 Spring Cloud1.1 什么是微服务?1.2 什么是 Spring Cloud?1.3 微服务 VS Spring Cloud 2.为什么要学微服务?3.Spring Cloud 组件介绍1.什么是 Nacos?1.1 Nacos 功能1.1.1 配置中心1.1.2 注册中心 1.2 Na…

29、shell变量、重定向及运算符

一、shell脚本 1.1、shell的定义 脚本:可运行的代码的集合,脚本语言(计算机语言)。 脚本的特点:从上到下,按行执行。 python:脚本语言 格式更严谨的执行缩进。也是从上到下按行执行。 shel…

正式发布 | 极海首款GHD3440电机专用栅极驱动器,构建多元电机产品矩阵

​栅极驱动器是低压控制器和高功电路之间的缓冲电路,用于放大控制器的控制信号,从而实现功率器件更有效的导通和关断。随着各种智能电子设备的不断普及和应用,栅极驱动器的市场需求也在不断增加。据国际权威研究机构Yole Group预计&#xff0…

元灵诀 逆天纪系统搭建 零撸看广告升级模式 定制开发

在当今互联网飞速发展的时代,元灵诀逆天纪系统的出现无疑为游戏行业注入了新的活力。这款系统不仅是一个定制开发的youxiu作品,更是对游戏产业的一次深度思考和探索。其独特的零撸看广告升级模式,将游戏体验和商业模式完美结合,开…

HoloLens2系列讲解 - 05 HoloLens2 Appx 安装

安装准备 Hololens2设备打包好的Appx文件一台电脑Hololens2 和电脑需要处于同一局域网 安装Appx 1.在Hololens设备上点击设置->网络和Internet->选择“自己wifi名称”网络并点击自动连接。 2.查看HoloLens的IP地址,如192.168.0.1。 (1&#xff…

【Go语言】面向对象编程(二):通过组合实现类的继承和方法重写

通过组合实现类的继承和方法重写 要实现面向对象的编程,就必须实现面向对象编程的三大特性:封装、继承和多态。 1 封装 类的定义及其内部数据的定义可以看作是类的属性,基于类定义的函数方法则是类的成员方法。 2 继承 Go 语言中&#x…

微软将 AI 工具和软件的研发工作外包给 OpenAI

微软将 AI 工具和软件的研发工作外包给 OpenAI 科技媒体 CNBC 报道称,微软正计划将其人工智能(AI)工具和软件的开发工作外包给OpenAI,这对竞争对手谷歌来说无疑是一个利好消息。 Okta首席执行官Todd McKinnon表示,微…

【浏览器清空证书】

chrome://net-internals/#hsts 在地址栏输入并访问:chrome://net-internals/#hsts

.NET C# 读写Excel及转换DataTable

目录 .NET C# 读写Excel及转换DataTable1. 依赖库2. Nuget包与版本3. ExcelUtil3.1 Excel sheet 转 DataTable3.2 Excel sheet 转 DataSet3.3 DataTable 转 Excel sheet3.4 DataSet 转 Excel3.5 私有方法 .NET C# 读写Excel及转换DataTable 1. 依赖库 using NPOI.HSSF.UserMo…

[数据集][目标检测]中国象棋检测数据集VOC+YOLO格式300张12类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):300 标注数量(xml文件个数):300 标注数量(txt文件个数):300 标注类别…

串口通信的基本概念

串口通信(Serial Communications)的基本概念可以归纳为以下几个方面: 1、定义与原理: 串口通信是一种通过串行接口进行数据传输的通信方式。它可以将接收来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可…