当前位置: 首页 > news >正文

搭建消息时光机:深入探究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 提供了一种在特定场景下简化历史消息获取的机制,提高了系统的灵活性。在使用时,需要根据具体业务需求和性能要求来权衡是否使用以及如何配置。

结语

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

在这里插入图片描述

相关文章:

  • Qt/C++视频监控安卓版/多通道显示视频画面/录像存储/视频播放安卓版/ffmpeg安卓
  • ToolLLM model 以及LangChain AutoGPT Xagent在调用外部工具Tools的表现对比浅析
  • 深度学习记录--矩阵维数
  • 塑料检查井配套开发了注塑成型的井盖、井筒、井座
  • 详细教程 - 从零开发 Vue 鸿蒙harmonyOS应用 第一节
  • 基础算法(1):排序(1):选择排序
  • 云原生之深入解析如何在Kubernetes中快速启用Cgroup V2支持
  • 【教学类-06-16】20231213 (按比例抽题+乱序or先加再减后乘)X-Y之间“加法减法乘法+-×混合题”
  • Yaml语法解析
  • CTF网络安全大赛是干什么的?发展史、赛制、赛程介绍,参赛需要学什么?
  • 10.RIP路由信息协议
  • Java 基础学习(十一)File类与I/O操作
  • 如何退回chrome旧版ui界面?关闭Chrome浏览器新 UI 界面
  • nginx_rtmp_module 之 ngx_rtmp_live_module模块
  • Vue3源码梳理:响应式系统的前世今生
  • crontab执行失败的多种原因
  • Docker 笔记(2):Dockerfile
  • echarts的各种常用效果展示
  • JS题目及答案整理
  • Just for fun——迅速写完快速排序
  • Laravel Telescope:优雅的应用调试工具
  • Linux各目录及每个目录的详细介绍
  • tweak 支持第三方库
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 基于 Babel 的 npm 包最小化设置
  • 来,膜拜下android roadmap,强大的执行力
  • 深入浅出Node.js
  • 算法系列——算法入门之递归分而治之思想的实现
  • 微信支付JSAPI,实测!终极方案
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 在Docker Swarm上部署Apache Storm:第1部分
  • 说说我为什么看好Spring Cloud Alibaba
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • #AngularJS#$sce.trustAsResourceUrl
  • #pragma once与条件编译
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (2)Java 简介
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (ZT)薛涌:谈贫说富
  • (八十八)VFL语言初步 - 实现布局
  • (补)B+树一些思想
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (算法)Game
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • (转)视频码率,帧率和分辨率的联系与区别
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • .net Application的目录
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .net 调用php,php 调用.net com组件 --
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。