搭建消息时光机:深入探究RabbitMQ_recent_history_exchange在Spring Boot中的应用【RabbitMQ实战 二】

欢迎来到我的博客,代码的世界里,每一行都是一个故事


在这里插入图片描述

搭建消息时光机:深入探究RabbitMQ_recent_history_exchange在Spring Boot中的应用

    • 引言
    • 前言
    • 第一:开启插件支持
    • 第二:springboot整合
    • 第三:效果展示
      • 交换机属性展示
      • 功能实现展示
    • 第四:使用场景
      • 使用场景:
    • 总结:
    • 结语

引言

🌺:docker构建rabbitmq并配置延迟队列插件

⏳:Spring Boot中的RabbitMQ死信队列魔法:从异常到延迟,一网打尽【RabbitMQ实战 一】

ℹ️:RabbitMQ插件详解:rabbitmq_recent_history_exchange【RabbitMQ 七】

前言

在编程的世界里,时间似乎总是紧迫的。但是,如果你有了一台消息时光机,就能够轻松穿越异步通信的时空,实现更为精准的消息处理。今天,我们将探索RabbitMQ_recent_history_exchange这个神奇的时光机,看看它如何与Spring Boot一同构建异步通信的未来!

第一:开启插件支持

对于RabbitMQ3.6.0或更高版本,此插件已经内置到RabbitMQ中

⭐️:开启方式

# 非docker搭建,或已经进入到容器内的
rabbitmq-plugins enable rabbitmq_recent_history_exchange
# docker-compose搭建,或docker搭建
docker exec myRabbitmq rabbitmq-plugins enable rabbitmq_recent_history_exchange
# 其中myRabbitmq为你的容器名称

👊:配置成功return

在这里插入图片描述

第二:springboot整合

这里基础的整合和上面引言中的实战是一样的,就不过多的赘述了,只贴出关键性代码,以及相应的实现

@Bean
public CustomExchange exchange() {Map<String, Object> args = new HashMap<>();args.put("x-recent-history-length", 100); // 使用插件提供的 x-delayed-type 参数return new CustomExchange(MQ_EXCHANGE,"x-recent-history", true, false,args);
}

1️⃣: args.put("x-recent-history-length", 100);指的是此交换将存储通过交换发送的最新 100条消息

2️⃣: CustomExchange(MQ_EXCHANGE,"x-recent-history", true, false,args)指定类型为x-recent-history

3️⃣:防止存储某些消息

如果您不想存储某些消息,只需将"x-recent-history-no-store"带有值的标头添加true到消息中即可。

第三:效果展示

交换机属性展示

下图可以明显的看到交换机的类型,以及存储的最大条数

在这里插入图片描述

功能实现展示

要清楚的看到最后的实现效果,需要进行如下几步

1️⃣:上面都配置好,且交换机创建成功

2️⃣:需要实现一个队列去绑定上面的交换机,且发送一些消息

3️⃣:再创建一个新的队列绑定上面的交换机,即可出现以下效果

在这里插入图片描述

上面的testQueue是新创建的队列,可以发现,交换机会自动向其推历史的消息

第四:使用场景

rabbitmq_recent_history_exchange 插件的实际使用场景通常涉及到需要在消费者订阅某个交换机时获取历史消息的情况。这在一些特定的应用场景中是非常有用的,以下是一些可能的使用场景和总结:

使用场景:

  1. 新加入的消费者获取历史消息: 当一个新的消费者加入系统时,它可能需要获取之前已经发布到交换机上的消息,以确保不会错过重要的信息。这在一些实时通讯或实时监控系统中比较常见。

  2. 应用重启时的数据同步: 在应用程序重启时,如果需要将某些历史数据同步到内存中,可以使用 rabbitmq_recent_history_exchange 来获取之前的消息,而不是从数据库等持久化存储中重新加载。

  3. 实时数据流: 对于实时数据流应用,新的消费者加入时可能需要获取历史数据,以确保对整个数据流的完整性有一个良好的认知。

  4. 数据快照: 在某些场景中,需要定期或事件触发地获取一段时间内的消息数据快照。rabbitmq_recent_history_exchange 可以用于在特定时刻获取消息的快照。

总结:

  • 优势: 提供了在订阅时获取历史消息的机制,简化了对历史数据的处理,使得新的消费者能够更容易地获取之前的消息。

  • 适用性: 适用于需要在消费者订阅时获取历史消息的场景,特别是那些对实时性要求不是非常严格的应用。

  • 注意事项: 对于对实时性要求非常高的场景,可能需要谨慎使用,因为历史消息的获取可能引入一定的延迟。

  • 配置参数: 需要根据实际需求合理配置交换机和队列的参数,如历史消息的长度和过期时间。

总体而言,rabbitmq_recent_history_exchange 插件为 RabbitMQ 提供了一种在特定场景下简化历史消息获取的机制,提高了系统的灵活性。在使用时,需要根据具体业务需求和性能要求来权衡是否使用以及如何配置。

结语

深深感谢你阅读完整篇文章,希望你从中获得了些许收获。如果觉得有价值,欢迎点赞、收藏,并关注我的更新,期待与你共同分享更多技术与思考。

在这里插入图片描述

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

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

相关文章

locust 压测 websocket

* 安装 python 3.8 https://www.python.org/ py --version * 安装 locust pip install locust2.5.1 -i http://pypi.douban.com/simple/ pip install locust2.5.1 -i https://pypi.mirrors.ustc.edu.cn/simple/ locust -V 备注&#xff1a;-i 是切换下载源 * 安装依赖 pip ins…

Electron框架:构建跨平台桌面应用的终极解决方案

文章目录 一、Electron框架简介二、Electron框架的优势1. 开发效率高2. 跨平台性能好3. 易于维护4. 强大的原生能力 三、如何使用Electron框架快速开发跨平台桌面应用1. 安装Electron2. 创建项目文件夹3. 编写主进程代码4. 编写界面代码5. 运行应用 《Electron入门与实战》编辑…

《软件方法》2023版1.1利润=需求-设计1.2 ABCD工作流

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 第1章 建模和UML 牵着你走进傍晚的风里&#xff0c;看见万家灯火下面平凡的秘密。 《情歌唱晚》&#xff1b;词&#xff1a;黄群&#xff0c;曲&#xff1a;黄群&#xff0c;唱&#…

word文档实现“目录索引中标题加粗、前导符(...)和页码不加粗”效果

文章目录 1 展示论文模板需要呈现的效果2 所遇到的问题2.1 情形1&#xff1a;当更新整个目录后&#xff0c;目录中的所有文字都不加粗2.2 情形2&#xff1a;无法单独选中文字部分&#xff0c;如果相对文字部分加粗&#xff0c;则前导符和页码也会同时加粗 3 解决步骤3.1 步骤1&…

CIDR(无类域间路由)与VLSM(可变长度子网掩码)的区别

CIDR和VLSM的介绍 CIDR CIDR&#xff08;Classless Inter-Domain Routing&#xff0c;无类域间路由&#xff09;是一种用于对互联网协议&#xff08;IP&#xff09;地址进行聚合和分配的标准。CIDR的引入旨在解决IPv4地址空间的不足和低效分配的问题。在传统的IP地址规划中&a…

关键点检测之修改labelme标注的json中类别名

import json import os import shutil#source_dir表示数据扩增之后的文件夹路径&#xff0c;此时标注的是多分类的标签 #new_dir表示转化之后得到的二分类文件夹def to2class():#json存放路径source_dir r1#json保存路径new_dir r1for i in os.listdir(source_dir):if i.ends…

文本聚类——文本相似度(聚类算法基本概念)

一、文本相似度 1. 度量指标&#xff1a; 两个文本对象之间的相似度两个文本集合之间的相似度文本对象与集合之间的相似度 2. 样本间的相似度 基于距离的度量&#xff1a; 欧氏距离 曼哈顿距离 切比雪夫距离 闵可夫斯基距离 马氏距离 杰卡德距离 基于夹角余弦的度量 公式…

银行数字化转型导师坚鹏:银行数字化转型正在重塑您的工作

您好&#xff0c;我是银行数字化转型导师坚鹏。坚持知行果合一&#xff0c;赋能数字化转型&#xff01;非常荣幸和您分享关于银行数字化转型如何影响老百姓工作的一些思考。 您知道吗&#xff1f;银行数字化转型给您的工作方式带来新变化、新趋势、新潮流啦&#xff01;在这个…

一分钟解决:vscode卡在“设置SSH主机:VS Code-正在本地下载 VS Code 服务器”

问题&#xff1a;vscode之前可正常使用&#xff0c;更新之后&#xff0c;连接服务器卡住了。 解决&#xff1a;从CMD或者你的终端连接服务器&#xff0c;进入vscode-server目录下&#xff0c;删除一些文件夹就行&#xff0c;然后使用vscode重新链接&#xff0c;它会自动下载新…

系列七、函数

一、函数 1.1、概述 函数 是指一段可以直接被另一段程序调用的程序或代码。 也就意味着&#xff0c;这一段程序或代码MySQL中已经为我们提供好了&#xff0c;我们要做的就是在合适的业务场景调用对应的函数完成相应的业务需求即可。 1.2、分类 按照业务分类&#xff0c;MySQL中…

基于SSM的影视企业全渠道会员管理系统(有报告)。Javaee项目

演示视频&#xff1a; 基于SSM的影视企业全渠道会员管理系统&#xff08;有报告&#xff09;。Javaee项目 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring S…

Python将列表中的数据写入csv并正确解析出来

用Python做数据处理常常会将数据写到文件中进行保存&#xff0c;又或将保存在文件中的数据读出来进行使用。通过Python将列表中的数据写入到csv文件中很多人都会&#xff0c;可以通过Python直接写文件或借助pandas很方便的实现将列表中的数据写入到csv文件中&#xff0c;但是写…

计算机毕业设计 基于SpringBoot的物资管理信息系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

nginx_rtmp_module 之 ngx_rtmp_live_module模块

模块作用 直播模块代码 ngx_rtmp_live_module.c&#xff0c;主要作用是&#xff1a;当客户端推流或者拉流的时候&#xff0c;创建的rtmp session会加入到 live 模块的存储链表中。 模块配置命令 static ngx_command_t ngx_rtmp_live_commands[] {{ ngx_string("live&…

vue3 插槽slot

插槽是子组件中的提供给父组件使用的一个占位符&#xff0c;用 <slot> 表示&#xff0c;父组件可以在这个占位符中填充任何模板代码&#xff0c;如 HTML、组件等&#xff0c;填充的内容会替换子组件的<slot> 元素。<slot> 元素是一个插槽出口 (slot outlet)&…

蓝桥杯专题-真题版含答案-【骑士走棋盘】【阿姆斯壮数】【Shell 排序法 - 改良的插入排序】【合并排序法】

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分…

李宏毅机器学习2023课程记录(1)--课程介绍

李宏毅机器学习2023课程记录(1)–课程介绍 在这里&#xff0c;记录我最近听的李宏毅老师的机器学习课程的一些笔记和感想&#xff0c;进行归纳总结同时方便后续复习回顾。 注&#xff1a;这门课虽然叫做机器学习&#xff0c;但是李宏毅老师讲课主要以深度学习的技术&#xff0…

在Node.js中MongoDB的连接查询操作

本文主要介绍在Node.js中MongoDB的连接查询操作。 目录 Node.js中MongoDB的连接查询操作使用原生的mongodb驱动程序进行连接查询操作使用Mongoose库进行连接查询操作注意项 Node.js中MongoDB的连接查询操作 在Node.js中使用MongoDB进行连接操作&#xff0c;可以使用原生的mong…

AOP切入点表达式和使用连接点获取匹配到的方法信息

目录 第一种 execution(访问修饰符? 返回值 包名.类名.?方法名(方法参数) throws 异常?) 第二种 annotation(com.itheima.anno.Log 首先&#xff0c;自定义一个注解&#xff0c;可以自己随意命名&#xff1a; 第一种 execution(访问修饰符? 返回值 包名.类名.?方法名…

Explain工具-SQL性能优化

文章目录 SQL性能优化的目标Explain中type效率级别&#xff08;重要&#xff09;注意 Explain覆盖索引ExplainindexExplainfilesortExplainfilesort创建 idx_bd(b,d) SQL性能优化的目标 达到 range 级别 Explain中type效率级别&#xff08;重要&#xff09; 显示的是单位查询…