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.1
    password: ***
    port: 5672
    username: ***
    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 {

    @Autowired
    private 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 交换机用于延迟消息的投递,需要安装额外的插件。

不同类型的交换机在消息路由和转发方式上有所不同,选择正确的交换机类型有助于实现所需的消息传递逻辑。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Sectigo与Geotrust ov多域名证书的区别

Sectigo和Geotrust都是比较知名的CA认证机构。其中,Sectigo原名Comodo,在2018年整合SSL证书业务,改名为Sectigo,旗下的SSL证书产品根证书也变为Sectigo。Geotrust则是另一个备受信任的数字证书品牌,现在是Digicert旗下…

不会代码(零基础)学语音开发(语音控制舵机)

舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。 舵机,作为模块系列S产品的四大重要组件之一,其在应用中发挥着十分重要的作用。舵机常使用的地方:航模,智能小车,机器人,以及工业领域等等 这…

锐捷 | 策略路由

一、组网要求 1)三层交换机的192.168.2.0/24网段访问外网固定走172.16.1.1这条线 2)三层交换机的192.168.3.0/24网段访问外网固定走172.16.2.1这条线 二、组网拓扑 三、配置要点 1、根据规划,在设备接口上配置IP地址 2、配置OSPF进程 3、所…

第五周:深度学习知识点回顾

前言: 讲真,复习这块我是比较头大的,之前的线代、高数、概率论、西瓜书、樱花书、NG的系列课程、李宏毅李沐等等等等…那可是花了三年学习佳实践下来的,现在一想脑子里就剩下几个名词就觉得废柴一个了,朋友们有没有同感…

不能错过的AI前沿开源工具!

🌈🌈🌈🌈🌈🌈🌈🌈 欢迎关注公众号(通过文章导读关注:【11来了】),及时收到 AI 前沿项目工具及新技术 的推送 发送 资料 可领取 深入理…

【软件测试】2024年准备中/高级测试岗技术面试...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、软件测试基础知…

NVM NodeJs版本管理 通关宝典

NVM NodeJs版本管理 通关宝典🏹 文章目录 NVM NodeJs版本管理 通关宝典🏹一、NVM是什么二、开始使用NVM三、NVM 命令速查四、手动安装特定Node版本(Windows)🙄4.1 NVM for windows 运行机制4.2 手动安装流程 五、切换 NVM 下载镜像源六、常见…

如何实现安卓端与苹果端互通

在移动应用开发中,如何实现安卓端和苹果端的互通是一个重要的问题。二者缺少一个都会有损失,那如何实现安卓端跟苹果端互通,下面简单的介绍几点方法来帮助你再不同的平台上实现数据交互和功能互通。 基于Web技术 使用Web技术是一种常见并且…

ReactNative 常见问题及处理办法(加固混淆)

文章目录 摘要 引言 正文ScrollView内无法滑动RN热更新中的文件引用问题RN中获取高度的技巧RN强制横屏UI适配问题低版本RN(0.63以下)适配iOS14图片无法显示问题RN清理缓存RN navigation参数取值pod install 或者npm install 443问题处理 打开要处理的…

spark的任务提交方式及流程

本地模式 local 测试用,不多赘述 分布式模式 standalone standalone集群是spark 自带的一个资源调度集群,分为两个角色,master/worker,master负责接收任务请求、资源调度(监听端口7077),worker负责运行exec…

汇报学习1

汇报的重点 项目的意义:可复制的经验、未来的领头基层要多具体的案例且真正有意义提拔的人的标准 汇报的维度 多做定期和主动的回报。 适当的工作汇报,也是对对方尊重的体现。(每一周或每两三天的回报里,要体现对领导的尊重&#…

【2023年度技术盘点】「年终盘点后端系列」探索服务架构体系的技术风向,构建微服务核心能力(升级版)

探索服务架构体系的技术风向,构建微服务核心能力 文章导航大纲前提背景架构未来的风向云原生化的微服务架构(未来软件架构)历史历代服务架构路径新时代架构预测服务架构方向—云原生化微服务云原生化微服务提升了哪些方面 云原生化微服务架构…

Vue 之 修饰符汇总

一、简介 在Vue中,修饰符是一种特殊的语法,用于修改指令或事件绑定的行为,它们以点号(.)的形式添加到指令或事件的后面,并可以改变其默认行为或添加额外的功能,如:禁止事件冒泡、数…

(NeRF学习)NeRF复现 win11

目录 一、获取源码二、环境三、准备数据集1.下载数据集方法一:官方命令方法二:官网下载数据集 2.修改配置 四、开始训练1.更改迭代次数2.开始训练方法一:方法二: 3.使用预训练模型 五、NeRF源码学习 一、获取源码 git clone http…

Vue页面传值:Props属性与$emit事件的应用介绍

一、vue页面传值 在Vue页面中传值有多种方式,简单介绍以下两种 通过props属性传递值:父组件在子组件上定义props属性,子组件通过props接收父组件传递的值。通过$emit触发事件传递值:子组件通过$emit方法触发一个自定义事件&#…

全屏字幕滚动APP:12月份广告总收:84.89元(2023年12月份) 穿山甲SDK接入收益·android广告接入·app变现·广告千展收益·eCPM收益

接入穿山甲SDK app示例: android 数独小游戏 经典数独休闲益智 广告接入示例: Android 个人开发者如何接入广告SDK,实现app流量变现 2023年12月份,总新增用户1242 友盟统计: 12月份:总新增用户1242 2023年12月份…

记录汇川:水塔指令解释-ST

可以通过帮助查看指令手册 PLC的IO地址映射-两种方法 第一种: 新建一个全局变量表,按照如图所示建立IO地址 第二种: 直接如图所示位置定义名字 注意:IW和QB这两个前面一个有蓝色M一个没有。 蓝色的M表示模块发生变化的时候地址不会…

用frp实现内网穿透远程连接终端设备进行调试

一、产品选择分析对比 项目中有用到硬件设备的远程调试,跟大佬们沟通后,大佬推荐这个工具,研究了下也挺好用NATAPP-内网穿透 基于ngrok的国内高速内网映射工具l​​​​​​​m 一般企业用VIP2就行,这个通道 一个通道只能在一个设备上,不限制你连接这台设备的数量…

SSM建材商城网站----计算机毕业设计

项目介绍 本项目分为前后台,前台为普通用户登录,后台为管理员登录; 管理员角色包含以下功能: 管理员登录,管理员管理,注册用户管理,新闻公告管理,建材类型管理,配货点管理,建材商品管理,建材订单管理,建材评价管理等功能。 用…