rabbitmq延时队列相关配置
确保 RabbitMQ 的延时消息插件已经安装和启用。你可以通过执行以下命令来安装该插件:
rabbitmq-plugins enable rabbitmq_delayed_message_exchange
如果提示未安装,以下是安装流程:
查看mq版本:
查看自己使用的 MQ(消息队列)的版本,可以使用以下方法之一:
查看 MQ 的安装目录或文档:在 MQ 的安装目录中,通常会包含一个关于版本信息的文件或文件夹,例如 version.txt、README.md、docs 等。你可以查找这些文件,其中应该包含有关 MQ 版本的信息。查看管理界面:某些 MQ 提供了管理界面,你可以通过浏览器登录管理界面,在界面上查看版本信息。通常,你需要提供相关的 URL、用户名和密码来访问管理界面。使用命令行工具:有些 MQ 提供了命令行工具,可以通过命令行查看版本信息。例如,如果你使用的是 Apache Kafka,则可以使用命令 kafka-topics.sh --version 来查看 Kafka 的版本号。查看依赖库或客户端:如果你使用的是 MQ 的客户端库或者集成了 MQ 的框架,可以查看相应的依赖库或客户端代码,通常会在其文档或源代码中提供版本信息。
下载插件
https://www.rabbitmq.com/community-plugins.html
rabbitmq_delayed_message_exchange 选择对应的版本
点击rabbitmq_delayed_message_exchange-3.12.0.ez 进行下载
安装插件
进入MQ的安装目录中的plugins目录 把插件放入到plugins目录
进入sbin目录,打开管理员控制台,
执行一下命令
bash rabbitmq-plugins enable rabbitmq_delayed_message_exchange
显示类似信息即可:
rabbitmq_delayed_message_exchange-3.12.0.ez 插件可以安装到 Linux 服务器上的
RabbitMQ。要安装 RabbitMQ 插件,你需要确保已经安装了 RabbitMQ 服务器,并且具有适当的权限。以下是在 Linux 服务器上安装
RabbitMQ 插件的一般步骤:下载插件文件 rabbitmq_delayed_message_exchange-3.12.0.ez 到 Linux 服务器上。打开终端,使用 cd 命令导航到 RabbitMQ 的安装目录,通常默认安装位置是 /usr/lib/rabbitmq 或 /usr/local/sbin。如果不清楚安装位置,可以使用 which rabbitmq-server 命令来查找 RabbitMQ
服务器的位置。
运行以下命令,将插件安装到 RabbitMQ 服务器中:
bash sudo rabbitmq-plugins enable rabbitmq_delayed_message_exchange
如果命令成功执行,将显示类似以下内容的消息:
The following plugins have been enabled:
rabbitmq_delayed_message_exchange Applying plugin configuration to
rabbit@localhost… started 6 plugins.重启 RabbitMQ 服务器,以使插件生效:
bash sudo systemctl restart rabbitmq-server
完成以上步骤后,rabbitmq_delayed_message_exchange 插件将安装并启用在 RabbitMQ
服务器上,可以开始使用延迟消息交换功能。请注意,确保你已经正确下载了兼容你所使用的 RabbitMQ 版本的插件文件。
查看延时队列
确保你的项目中引入了 spring-rabbit 依赖。在你的 Spring Boot 配置文件中添加以下配置:
spring:rabbitmq:host: 127.0.0.1password: ***port: 5672username: ***virtual-host: ***
这些属性是用于配置Spring框架中与RabbitMQ消息队列相关的属性。让我逐个介绍一下每个属性的作用:
rabbitmq.host: 指定RabbitMQ服务器的主机地址。在这个示例中,主机地址是127.0.0.1,也就是本地主机。rabbitmq.port: 指定RabbitMQ服务器的端口号。默认的RabbitMQ端口号是5672,因此在这个示例中,端口号为5672。rabbitmq.username: 指定连接RabbitMQ服务器时使用的用户名。在这个示例中,用户名是***。rabbitmq.password: 指定连接RabbitMQ服务器时使用的密码。在这个示例中,密码是***。rabbitmq.virtual-host: 指定RabbitMQ服务器的虚拟主机。虚拟主机是RabbitMQ中用于隔离不同应用之间的消息队列的逻辑概念。在这个示例中,虚拟主机是***。
rabbitmq管理平台配置延时队列:
直接使用 direct 类型的交换机是无法实现延时队列功能的。direct 类型的交换机是根据 Routing Key 进行精确匹配,将消息发送到与 Routing Key 完全匹配的队列中,而不会对消息进行延时投递。
如果你需要实现延时队列功能,可以考虑使用 RabbitMQ 插件 rabbitmq_delayed_message_exchange 提供的 x-delayed-message 类型的交换机。该插件允许你在 RabbitMQ 中创建一个特殊类型的交换机,支持延时消息的投递。
使用 x-delayed-message 类型的交换机,你可以在发送消息时设置消息的头部属性作为延时时间,并且消息将会在指定的延时时间之后被投递到相应的队列。
请注意,使用 x-delayed-message 类型的交换机需要安装并启用 rabbitmq_delayed_message_exchange 插件。安装完成后,你可以在 RabbitMQ 中创建该类型的交换机,并按需使用延时队列功能。
当你在 RabbitMQ 中新增一个交换机时,需要设置一些属性来定义该交换机的行为。下面是各个属性的详细介绍:
Name(名称):交换机的名称,用于标识该交换机。名称必须是唯一的。Type(类型):交换机的类型,用于定义消息的路由方式。常见的交换机类型包括 direct、fanout、headers、topic 和 x-delayed-message。Durability(持久化):交换机是否持久化到磁盘。如果将此属性设置为 true,则 RabbitMQ 会将该交换机保存到磁盘上,以便在服务器重启后仍然存在。Auto delete(自动删除):是否在最后一个绑定到交换机的队列被删除后自动删除交换机。如果将此属性设置为 true,则 RabbitMQ 会在没有任何队列绑定到该交换机时自动删除该交换机。Internal(内部):是否是一个内部交换机。如果将此属性设置为 true,则该交换机只能被其他交换机使用,而不能被客户端直接发送消息到该交换机。Arguments(参数):交换机的其他参数,用于控制交换机的行为。Argument 的值可以是任何有效的 Erlang 对象。
在设置延时队列时,你需要使用 x-delayed-type 参数来指定该交换机的类型为 x-delayed-message,并使用 x-delayed-message 的头部属性 x-delay 来指定消息的延迟时间。
通过配置这些属性,Spring框架可以使用指定的主机、端口、用户名和密码来连接RabbitMQ服务器,并在指定的虚拟主机中进行消息队列的操作。这样,我们就可以在Spring应用程序中方便地使用RabbitMQ来实现消息的发送和接收。
在你的代码中,使用 RabbitTemplate 的 convertAndSend() 方法发送消息到延时队列。同时,设置消息的延时时间。
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;@Component
public class DelayedQueueExample {@Autowiredprivate RabbitTemplate rabbitTemplate;public void sendMessageWithDelay(MessageDto messageDto, int delayInMillis) {rabbitTemplate.convertAndSend("my-delayed_exchange", "sms.api.routing",messageDto, message -> {message.getMessageProperties().setHeader("x-delay", delayInMillis);//毫秒return message;});System.out.println("Message sent to delayed queue.");}
}
在这个示例中,我们使用 RabbitTemplate 的 convertAndSend() 方法发送消息到名为 delayed_exchange 的交换机,并指定路由键为 ums.api.routing。我们还为消息设置了延时时间,通过在 convertAndSend() 方法中使用 lambda 表达式修改消息的属性。
请注意,你需要将 delayed_exchange 替换为实际的交换机名称,根据你的需求修改路由键和消息体。此外,确保 MessageDto 类是可序列化的,并在你的项目中定义。
这样,你的消息就会被发送到延时队列中,等待指定的延时时间后才会被消费。
如果在 x-delayed-message 交换机中不设置延迟时间,其行为与普通的 Direct 交换机非常相似。
Direct 交换机是 RabbitMQ 中最简单的一种交换机类型,它将消息发送到与绑定键完全匹配的队列。当你使用 Direct 交换机时,可以通过指定绑定键来路由消息到特定的队列。
x-delayed-message 交换机是一个插件提供的自定义交换机,它允许你发送带有延迟的消息。你可以通过设置消息的 x-delay 属性来指定消息的延迟时间。当消息到达 x-delayed-message 交换机时,交换机会根据消息的延迟时间将其暂时存储,然后在延迟时间到达后将其转发到相应的队列。
如果在 x-delayed-message 交换机中不设置延迟时间(即所有消息的 x-delay 属性都为零或未设置),该交换机将表现得与 Direct 交换机相同。消息将立即被路由到匹配的队列,没有任何延迟。
因此,如果不需要延迟消息功能,只需直接发送消息到 x-delayed-message 交换机,它将像 Direct 交换机一样工作。如果需要延迟消息功能,请确保为每条消息设置适当的 x-delay 属性,以指定延迟时间。
已经创建好的交换机不能再更新type:
RabbitMQ 中的交换机类型是在创建时确定的,一旦交换机创建后,就无法直接修改其类型。要更改交换机的类型,你需要按照以下步骤进行操作:
创建一个新的交换机,使用所需的类型。例如,如果你想将交换机从 Direct 类型更改为 Fanout 类型,可以创建一个新的 Fanout 交换机。将绑定到旧交换机上的队列和绑定迁移到新交换机。这可以通过解绑旧交换机和绑定新交换机来实现。解绑旧交换机:使用命令或管理界面将所有队列从旧交换机解绑。这将使队列不再接收来自旧交换机的消息。绑定新交换机:使用相同的绑定规则将队列绑定到新交换机上。这将确保消息可以通过新的交换机路由到正确的队列。确保在转移过程中不会丢失任何消息。你可以选择在迁移前停止消息发布者,以确保没有新消息发送到旧交换机上。然后,在完成旧交换机和新交换机之间的迁移后,重新启动消息发布者。
请注意,在进行交换机类型更改时,可能会涉及到一些风险和潜在问题,因此建议在生产环境中小心操作并进行充分的测试。
另外,如果你只是想更改交换机的属性而不是类型,例如更改交换机的名称、持久性或其他属性,你可以使用 RabbitMQ 的管理界面或命令行工具对交换机进行更新。
交换机类型区别:
在 RabbitMQ 中,有几种不同类型的交换机(Exchange),包括 direct、fanout、headers、topic 和 x-delayed-message。下面我将详细描述每种类型的区别:
Direct(直连交换机):Direct 交换机是最简单的一种类型,它将消息直接路由到与绑定键(Binding Key)完全匹配的队列。发送到 Direct 交换机的消息需要指定一个 Routing Key,该 Routing Key 与队列绑定时指定的 Binding Key 进行匹配。Fanout(扇形交换机):Fanout 交换机会将消息广播到绑定到它的所有队列,无论绑定键是什么。发送到 Fanout 交换机的消息会被转发到所有与之绑定的队列,而 Routing Key 将被忽略。Headers(标头交换机):Headers 交换机使用消息的标头属性来进行匹配,而不是使用 Routing Key。发送到 Headers 交换机的消息会根据标头属性的匹配情况被转发到相应的队列。Topic(主题交换机):Topic 交换机使用通配符和 Routing Key 的模式匹配来路由消息。发送到 Topic 交换机的消息的 Routing Key 是一个由多个单词组成的字符串,这些单词用点号(.)分隔。消息的 Routing Key 将被与队列绑定时指定的 Binding Key 进行模式匹配,符合匹配规则的消息将被路由到相应的队列。x-delayed-message(延迟消息交换机):x-delayed-message 交换机是 RabbitMQ 的一个插件提供的特殊类型的交换机,它支持延迟消息的投递。x-delayed-message 交换机可以根据消息的头部属性中设置的延迟时间来进行延迟投递。使用 x-delayed-message 交换机时,需要安装并启用 RabbitMQ 的 "rabbitmq_delayed_message_exchange" 插件。
总结:
Direct 交换机通过完全匹配 Routing Key 将消息发送到指定队列;
Fanout 交换机广播消息到所有绑定的队列;
Headers 交换机根据标头属性来匹配并转发消息;
Topic 交换机通过模式匹配 Routing Key 来转发消息;
x-delayed-message 交换机用于延迟消息的投递,需要安装额外的插件。
不同类型的交换机在消息路由和转发方式上有所不同,选择正确的交换机类型有助于实现所需的消息传递逻辑。
相关文章:
rabbitmq延时队列相关配置
确保 RabbitMQ 的延时消息插件已经安装和启用。你可以通过执行以下命令来安装该插件: rabbitmq-plugins enable rabbitmq_delayed_message_exchange 如果提示未安装,以下是安装流程: 查看mq版本: 查看自己使用的 MQ(…...
【工具】推荐一个好用的代码画图工具
PlantUML 官网地址:https://plantuml.com/zh/ 跳转 支持各种结构化数据画图支持代码调用jar包生成图片 提供在线画图能力 https://www.plantuml.com/plantuml/uml/SyfFKj2rKt3CoKnELR1Io4ZDoSa70000 有兴趣可以尝试下 over~~...
Leetcode14-判断句子是否为全字母句(1832)
1、题目 全字母句 指包含英语字母表中每个字母至少一次的句子。 给你一个仅由小写英文字母组成的字符串 sentence ,请你判断 sentence 是否为 全字母句 。 如果是,返回 true ;否则,返回 false 。 示例 1: 输入&am…...
HTTP和TCP代理原理及实现,主要是理解
Web 代理是一种存在于网络中间的实体,提供各式各样的功能。现代网络系统中,Web 代理无处不在。我之前有关 HTTP 的博文中,多次提到了代理对 HTTP 请求及响应的影响。今天这篇文章,我打算谈谈 HTTP 代理本身的一些原理,…...
MySQL中的连接池
数据库的连接池 1 )概述 网站连接数据库,为庞大用户的每次请求创建一个连接是不合适的关闭并重新连接的成本是很大的处理方法:设置最大值, 最小值, 设置最多闲置连接,设置等待阻塞 2 )示例演示 import threading i…...
css计时器 animation实现计时器延时器
css计时器 animation实现计时器延时器 缺点当切页面导航会休眠不执行 最初需求是一个列表每个项目都有各自的失效时间 然后就想到 计时器延时器轮询等方案 这些方案每一个都要有自己的计时器 感觉不是很好 轮询也占资源 然后突发奇想 css能不能实现 开始想到的是transition测…...
【win11 绕过TPM CPU硬件限制安装】
Qt编程指南 VX:hao541022348 ■ 下载iso文件■ 右键文件点击装载出现如下问题■ 绕过TPM CPU硬件限制安装方法■ 虚拟机安装win11 ■ 下载iso文件 选择Windows11 (multi-edition ISO)在选择中文 ■ 右键文件点击装载出现如下问题 ■ 绕过T…...
k8s的yaml文件中的kind类型都有哪些?(清单版本)
在操作kubernetes的过程中,我们接触到的yaml文件中的kind类型有很多。他们代表了kubernetes的不同类型的对象,了解了kind的类型,也就相当于了解了k8s都有哪些类型的对象。 类型清单及概要说明 序号类型简述1Pod一个Kubernetes中最基本的资源…...
Jetpack Room使用
Room使用 回顾 数据库有多张表,一张表只能记录一种Class,Class的具体属性是这个表的列;所有对表的操作都要通过Dao来访问 注解说明: Enity 作用于Class上,表示创建一张表记录该Class,Class内部属性使用…...
HarmonyOS应用开发之ArkTS语言学习记录
1、ArkTS介绍 ArkTS是鸿蒙生态的应用开发语言。它在保持TypeScript(简称TS)基本语法风格的基础上,对TS的动态类型特性施加更严格的约束,引入静态类型。同时,提供了声明式UI、状态管理等相应的能力,让开发者…...
windows 下 mongodb6.0 导入导出json文件
1.运行cmd窗口,进入MongoDB安装路径下的bin文件下,输入以下命令导入数据文件 mongoimport --host 127.0.0.1 --port 27017 --db <数据库名称,根据自个情况> -c <集合名称,自定义> --file <导入文件的路径名> …...
如何给 unplugin-vue-components/vite 写一个简单的 resolver
大部分工作 unplugin-vue-components 都已经处理好了, 我们只需要接收组件名来判断是否是自己的组件, 然后处理对应的导入逻辑。 一共 3 个字段 as 重命名类似 import { componentNameReName } from ‘xxxx’name 组件名 import { componentName } from ‘xxxx’from 导入路径…...
MYSQL篇--索引高频面试题
mysql索引 1什么是索引? 索引说白了就是一种数据结构,可以协助快速查询数据,以及更新数据库表中的数据,更通俗的来说索引其实就是目录,通过对数据建立索引形成目录,便于去查询数据,而mysql索引…...
视频号小店怎么上架商品?实操分享,干货满满!
我是电商珠珠 视频号小店从22年7月到现在也不过才发展了一年,它的风口才刚刚开始。 平台为了吸引商家入驻,会将大量红利向商家倾斜,只要把握住风口,就会很快起飞。 视频号小店对于很多人来说,都是新平台,…...
Python 常用数据类型
Python 常用数据类型有以下这些: 数据类型中文解析例子int整数,表示整数值1、2float浮点数,表示带有小数点的数值3.14、2.718complex复数,表示实部和虚部组成的复数12j、3-4jstr字符串,表示文本数据,用引号…...
基于yolov2深度学习网络的车辆行人检测算法matlab仿真
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022a 3.部分核心程序 .......................................................... load yolov2.mat% 加载训练好的…...
【QT】中英文切换
很高兴在雪易的CSDN遇见你 前言 本文分享QT中如何进行中英文切换,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^…...
vue实现代码编辑器,无坑使用CodeMirror
vue实现代码编辑器,无坑使用CodeMirror vue实现代码编辑器,使用codemirror5 坑:本打算cv一下网上的,结果发现网上的博客教程都是错的,而且博客已经是几年前的了,我重新看了github上的,发现安装的命令都已经不一样了。我…...
MR实战:网址去重
文章目录 一、实战概述二、提出任务三、完成任务(一)准备数据1、在虚拟机上创建文本文件2、上传文件到HDFS指定目录 (二)实现步骤1、创建Maven项目2、添加相关依赖3、创建日志属性文件4、创建网址去重映射器类5、创建网址去重归并…...
linux 内核编译安装
一、配置 默认配置 make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- omap2plus_defconfig原配置 make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- oldconfig 重新配置 make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- menuconfig二 kernel zImage make ARCHarm CRO…...
hash基础知识(算法村第五关青铜挑战)
一、Hash的概念和基本特征 哈希(Hash)也称为散列,就是把任意长度的输入,通过散列算法,变换成固定长度的输出,这个输出值就是散列值。 二、碰撞处理方法(2种) 在上面的例子中,我们发现有些在Hsh中很多位置可能要存两个甚…...
Linux第8步_USB设置
学习完设置“虚拟机的电源”后,接着学习通过鼠标点击操作U盘,目的是了解USB设置。 1、在桌面,双击“VMware Workstation Pro”图标,得到下图: 2、点击“编辑虚拟机”,得到下图: 只要点击编辑虚…...
第五节 强制规范commit提交 .husky/commit-msg: no-such file or directory问题解决办法
系列文章目录 目录 系列文章目录 前言 操作方法 总结 前言 在每次Git提交时,强制严格执行制定的规范。 操作方法 npm 安装commitlist 进行校验 npm install --save-dev @commitlint/config-conventional@12.1.4 @commitlint/cli@12...
2024年了,难道还不会使用谷歌DevTools么?
我相信您一定对Chrome浏览器非常熟悉,因为它是前端开发者最亲密的伙伴。我们可以使用它查看网络请求、分析网页性能以及调试最新的JavaScript功能。 除此之外,它还提供了许多功能强大但不常见的功能,这些功能可以大大提高我们的开发效率。 让我们来看看。 1. 重新发送XHR…...
springboot(ssm生产管理ERP系统 wms出入库管理系统Java系统
springboot(ssm生产管理ERP系统 wms出入库管理系统Java系统 开发语言:Java 框架:ssm/springboot vue JDK版本:JDK1.8(或11) 服务器:tomcat 数据库:mysql 5.7(或8.0)…...
通过使用别名让 SQL 更简短-数据库教程shulanxt.com-帆软软件有限公司
MySQL视频教程导航 https://www.shulanxt.com/database/mysqlvideo/p1 SQL 别名 SQL 别名 通过使用 SQL,可以为表名称或列名称指定别名。 基本上,创建别名是为了让列名称的可读性更强。 列的 SQL 别名语法 SELECT column_name AS alias_name FROM …...
最优化理论分析复习--最优性条件(一)
文章目录 上一篇无约束问题的极值条件约束极值问题的最优性条件基本概念只有不等式约束时 下一篇 上一篇 最优化理论复习–对偶单纯形方法及灵敏度分析 无约束问题的极值条件 由于是拓展到向量空间 R n R^n Rn, 所以可由高数中的极值条件进行类比 一阶必要条件 设函数 f (…...
基于WIFI指纹的室内定位算法matlab仿真
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1WIFI指纹定位原理 4.2 指纹数据库建立 4.3定位 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 .....................................…...
密码学:一文读懂非对称密码体制
文章目录 前言非对称密码体制的保密通信模型私钥加密-公钥解密的保密通信模型公钥加密-私钥解密的保密通信模型 复合式的非对称密码系统散列函数数字签名数字签名满足的三个基本要求先加密还是先签名?数字签名成为公钥基础设施以及许多网络安全机制的基础什么是单向…...
2_工厂设计_工厂方法和抽象工厂
工厂设计模式-工厂方法 1.概念 工厂方法模式(Fatory Method Pattern ) 是指定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行。 在工厂方法模式中用户只需要关心所需产品对应的工厂,…...
老虎机网站制作/怎么在百度上添加自己的店铺地址
iphone(UITableViewCell)动态加载图片http://developer.apple.com/library/ios/#samplecode/LazyTableImages/Introduction/Intro.html其实在iphone上面是实现图片的动态加载,其实也不是很难,其中只要在代理中实现方法就可以首先在头文件中声明使用到的代…...
北京网站建设公司招聘/免费域名注册服务网站
在使用 LUA 为 SEP 下载病毒定义时,病毒定义更新文件夹下会包含如下文件: ■ *.skn -- 白名单更新文件 ■ *.cal -- 商业应用程序列表更新文件 ■ *.osi -- X86 MAC 病毒定义更新 ■ *.osx -- MAC 病毒定义更新 ■ *110119022.m25 -- 从 2011-01-19…...
WordPress评论第页/深圳谷歌seo公司
中关村在线消息:自从去年魅族CEO黄章宣布下一代魅族旗舰手机将被命名为魅族15后,大家对这款手机的猜想就一直没有断过。不过随着时间的推移,也快到了这款手机发布的时候了。日前在安卓官网中惊现了三款魅族15系列新机的详细参数和基本外观&am…...
删除百度收录的网站/成都seo顾问
导语 | 本文从简洁架构的理论出发,依托trpc-go目录规范,简单阐述了整体代码架构如何划分,具体trpc-go服务代码实现细节,和落地步骤,并讨论了和DDD的区别。文章源于我们组内发起的go微服务最佳实践的第一部分࿰…...
网站建设服务商/如何给公司网站做推广
1. 引理1 2. 引理2 3. 定理1 4. 逆矩阵求解示例1 5. 逆矩阵求解示例2(伴随矩阵的逆矩阵的求解)...
网站描文本链接怎么做/产品宣传方式有哪些
上一节中我们对Activity一些基本的概念进行了了解,什么是Activity,Activity的生命周期,如何去启动一个Activity等,本节我们继续来学习Activity,前面也讲了一个App一般都是又多个Activity构成的,这就涉及到了多个Activity间数据传递的问题了,那么本节继续学习Activity的使…...