RabbitMQ插件详解:rabbitmq_recent_history_exchange【RabbitMQ 七】

🎏:你只管努力,剩下的交给时间

🏠 :小破站

rabbitmq_recent_history_exchange

    • 前言
    • 插件介绍
    • 工作原理
      • 工作原理概述:
      • 底层实现:
    • 配置和使用
      • 配置插件的详细步骤:
    • 实例演示
      • 场景描述:
      • 操作步骤:

前言

RabbitMQ作为一款强大的消息中间件,提供了许多有趣且功能强大的插件。其中,rabbitmq_recent_history_exchange插件以其独特的特性引起了广泛关注。本文将深入剖析这个插件的工作原理,揭示它在消息交换中的神奇之处。

插件介绍

rabbitmq_recent_history_exchange 插件是 RabbitMQ 的一个插件,用于实现 “recent history” 交换机。它的主要目的是在某些场景下提供消息历史记录的功能,允许消费者订阅交换机并获取最近发布的一些消息。

作用和目的:

  1. 消息历史记录: 这个插件的主要作用是提供一个交换机,允许消费者获取最近发布到该交换机上的一些消息历史记录。通常,交换机是实时进行消息传递的,但有时候我们可能需要获取之前发布的消息,比如在订阅频道之前获取一些历史消息。

  2. 配置消息保留: 插件允许配置保存在交换机上的消息数量,消费者可以通过订阅交换机来获取最新的消息历史记录。这对于一些特定场景,比如聊天室、实时通知等,是非常有用的。

为什么在某些场景下更为适用:

  1. 实时通知场景: 在需要实时通知用户的场景下,用户可能在进入频道之前就需要获取一些历史消息,以确保他们不会错过重要的信息。这在一些即时通讯、聊天室等场景中尤其有用。

  2. 订阅者加入时的历史消息: 对于加入订阅频道的新订阅者,通过获取最近的消息历史记录,可以更好地了解之前发生的事件,从而更好地融入当前的讨论。

  3. 消息保留配置: 插件允许配置保留在交换机上的消息数量,这使得在不同场景下可以灵活地控制历史消息的保留策略,以适应特定的业务需求。

总体而言,rabbitmq_recent_history_exchange 插件在一些需要获取消息历史记录的场景下更为适用,提供了一种方便且灵活的方式来处理这类需求。

工作原理

rabbitmq_recent_history_exchange 插件通过与交换机协同工作来记录最近的消息历史。下面是其大致的工作原理:

工作原理概述:

  1. 创建交换机: 使用插件创建一个特殊类型的交换机,这个交换机被称为 “recent history” 交换机。

  2. 消息历史记录的保存: 插件会在 “recent history” 交换机上保存一定数量的最近发布的消息。这个数量可以通过配置进行调整,以满足业务需求。

  3. 消息的转发: 当生产者发布消息到 “recent history” 交换机上时,插件会根据配置的消息保留数量,保留最新的消息,删除旧的消息。

  4. 消费者订阅: 消费者可以通过订阅 “recent history” 交换机来获取最新的消息历史记录。

底层实现:

  1. 数据结构: 插件需要维护一个有限长度的消息队列,用于保存最近发布的消息。这个队列可以使用循环队列或者其他数据结构进行实现。

  2. 消息存储: 当生产者发布消息时,插件将消息添加到消息队列中。同时,插件需要判断队列长度是否超过配置的最大保留消息数量,如果超过,则删除队列中最旧的消息。

  3. 消息转发: 插件需要监听 “recent history” 交换机上的消息,当有消息到达时,将消息从消息队列中取出并转发给订阅者。

  4. 消息保留配置: 插件允许通过配置来调整消息保留的数量,这可以通过在插件内部设置一个参数或者使用 RabbitMQ 的配置系统来实现。

  5. 与交换机协同工作: 插件需要与 RabbitMQ 的交换机系统协同工作,确保消息正确地进入到 “recent history” 交换机,并能够被订阅者获取。

  6. 消息订阅: 消费者通过订阅 “recent history” 交换机来获取最新的消息历史记录。当有新的消息到达时,插件会将消息发送给所有订阅者。

总体而言,rabbitmq_recent_history_exchange 插件通过在 “recent history” 交换机上维护一个有限长度的消息队列,实现了对最近消息历史记录的记录和转发。这个插件的实现涉及到消息存储、转发机制、与交换机的交互等方面。

配置和使用

配置和使用 rabbitmq_recent_history_exchange 插件涉及到以下步骤,包括启用插件、创建 “recent history” 交换机和配置交换机的参数。

配置插件的详细步骤:

  1. 检查 RabbitMQ 版本: 确保你的 RabbitMQ 版本符合 rabbitmq_recent_history_exchange 插件的要求。通常,建议使用 RabbitMQ 3.7.0 或更高版本。

  2. 启用插件: 使用以下命令启用 rabbitmq_recent_history_exchange 插件:

    rabbitmq-plugins enable rabbitmq_recent_history_exchange
    

    重启 RabbitMQ 以使更改生效:

    service rabbitmq-server restart
    
  3. 创建 “recent history” 交换机: 使用 RabbitMQ 管理界面或者命令行工具创建 “recent history” 交换机。以下是通过 RabbitMQ 管理界面的步骤:

    • 登录 RabbitMQ 管理界面(通常在 http://localhost:15672/)。

    • 在 “Exchanges” 选项卡中,点击 “Add a new exchange”。

    • 在 “Type” 选择框中选择 “recent_history”。

    • 输入交换机的名称,例如 “history_exchange”。

    • 点击 “Add exchange”。

  4. 配置交换机参数: 可以通过 RabbitMQ 管理界面或者命令行工具配置 “recent history” 交换机的参数。以下是通过 RabbitMQ 管理界面的步骤:

    • 在 “Exchanges” 选项卡中,找到刚刚创建的 “history_exchange”。

    • 点击 “history_exchange” 进入交换机详情页面。

    • 在 “Arguments” 部分,可以配置参数。例如,可以配置 “x-message-ttl” 参数来设置消息的存活时间。

    • 点击 “Save” 保存更改。

  5. 在应用中使用 “recent history” 交换机: 在生产者应用中,将消息发送到 “recent history” 交换机。在消费者应用中,订阅 “recent history” 交换机以获取最新的消息历史记录。

    // 生产者发布消息到 "recent history" 交换机
    channel.publish('history_exchange', 'your-routing-key', Buffer.from('Your message'));// 消费者订阅 "recent history" 交换机
    channel.consume('your-queue', (msg) => {console.log('Received message:', msg.content.toString());
    });
    

请注意,以上步骤和示例中的名称(如 “history_exchange”、“your-queue”、“your-routing-key”)只是示例,实际应用中需要根据业务需求进行调整。

通过以上步骤,你就可以在 RabbitMQ 中启用和使用 rabbitmq_recent_history_exchange 插件,实现最近消息历史记录的功能。

实例演示

在 RabbitMQ 中,rabbitmq_recent_history_exchange 插件允许消费者获取最近的消息历史记录,这在某些实际场景中非常有用。在下面的实例中,我们将演示如何查看和管理最近的消息历史,以及如何使用这些历史数据进行更灵活的消息路由。

场景描述:

假设我们有一个即时通讯应用,用户可以加入不同的聊天室,我们希望:

  1. 查看最近的消息历史: 对于新加入的用户,他们可以查看最近的消息历史,以便了解之前发生的对话。

  2. 消息路由灵活: 我们希望可以基于聊天室的不同,将消息路由到不同的 “recent history” 交换机,以实现每个聊天室的消息历史独立管理。

操作步骤:

  1. 创建不同的 “recent history” 交换机:

    • 登录 RabbitMQ 管理界面。

    • 在 “Exchanges” 选项卡中,点击 “Add a new exchange”。

    • 在 “Type” 选择框中选择 “recent_history”。

    • 输入交换机的名称,例如 “room1_history”、“room2_history”。

    • 点击 “Add exchange”。

  2. 在应用中使用 “recent history” 交换机:

    • 生产者应用中,根据聊天室的不同,将消息发送到对应的 “recent history” 交换机。
    // 生产者发布消息到 "room1_history" 交换机
    channel.publish('room1_history', 'room1-routing-key', Buffer.from('Room 1 message'));// 生产者发布消息到 "room2_history" 交换机
    channel.publish('room2_history', 'room2-routing-key', Buffer.from('Room 2 message'));
    
    • 消费者应用中,根据聊天室的不同,订阅对应的 “recent history” 交换机以获取最近的消息历史记录。
    // 消费者订阅 "room1_history" 交换机
    channel.consume('room1-queue', (msg) => {console.log('Room 1 received message:', msg.content.toString());
    });// 消费者订阅 "room2_history" 交换机
    channel.consume('room2-queue', (msg) => {console.log('Room 2 received message:', msg.content.toString());
    });
    
  3. 查看和管理最近的消息历史:

    • 在 RabbitMQ 管理界面的 “Exchanges” 选项卡中,你可以查看每个 “recent history” 交换机上的消息历史记录。

    • 在 “Queues” 选项卡中,你可以查看每个队列(对应每个聊天室的队列)上的消息历史记录。

通过这个实例,我们演示了如何使用 rabbitmq_recent_history_exchange 插件在不同的聊天室中实现消息历史记录的灵活管理,并通过 RabbitMQ 管理界面查看和管理这些历史数据。这对于实现类似聊天室、实时通知等场景中的消息处理非常有优势。

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

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

相关文章

【JAVA】黑马MybatisPlus 学习笔记【二】【核心功能】

2.核心功能 刚才的案例中都是以id为条件的简单CRUD,一些复杂条件的SQL语句就要用到一些更高级的功能了。 2.1.条件构造器 除了新增以外,修改、删除、查询的SQL语句都需要指定where条件。因此BaseMapper中提供的相关方法除了以id作为where条件以外&…

2023.12.13 libstdc++ undefined reference to GLIBCXX

如何升级linux的libstdc.so …/thirdparty/lib/rbdl/librbdl_urdfreader.so: undefined reference to std::ios_base_library_init()GLIBCXX_3.4.32’

Proxmox创建Windows虚拟机

文章目录 下载ISO安装文件上传 下载ISO安装文件 下载地址:https://www.xitongzhijia.net/ 也可去官网进行下载 上传 将下载的ISO文件上传到Proxmox 选择ISO文件进行上传 上传后再ISO镜像中可以看到安装文件 点击创建虚拟机 填写名称,不能填写中文 镜…

被围绕的区域[中等]

一、题目 给你一个m x n的矩阵board,由若干字符X和O,找到所有被X围绕的区域,并将这些区域里所有的O用X填充。 示例 1: 输入:board [["X","X","X","X"],["X",&qu…

aardio网页组件:webPageOperation

webPageOperation是webview的初步封装,用来网页填表、操作网页。可操作web.form、web.view、web.view2等浏览器组件。 使用方法 首先把webPageOperation.aardio(源码在后面)放到~\lib\godking目录下,然后新建窗口项目&#xff…

HarmonyOS开发入门HelloWorld及工具安装

下载与安装DevEco Studio 在HarmonyOS应用开发学习之前,需要进行一些准备工作,首先需要完成开发工具DevEco Studio的下载与安装以及环境配置。 进入DevEco Studio下载官网,单击“立即下载”进入下载页面。 DevEco Studio提供了Windows版本和…

mysql:在字符串类型的列上创建索引,建议指定索引前缀长度

https://dev.mysql.com/doc/refman/8.2/en/create-index.html#create-index-column-prefixes 在字符串类型的列上创建索引,建议指定索引前缀长度,而没有必要用整个列来创建索引。因为用前面的字符创建索引,查询时并不会比在整列上创建索引慢很…

【LeetCode刷题】-- 165.比较版本号

165.比较版本号 方法&#xff1a;使用双指针 class Solution {public int compareVersion(String version1, String version2) {//使用双指针int n version1.length(),m version2.length();int i 0,j 0;while(i<n || j <m){int x 0;for(; i < n && vers…

video 标签 各种属性及所有事件监听

网页中的video 属性和事件&#xff0c;用于计算观看视频的时长&#xff0c;其他用法备存。 <!-- video 不支持 IE8及以下版本浏览器&#xff0c;支持三种视频格式&#xff1a;MP4&#xff0c;WebM 和 Ogg --><video src"test.mp4" controls width"400…

鸿蒙OS应用开发者高级认证题库

一、判断题 云函数打包完成后&#xff0c;需要到AppGallery Connect创建对应函数的触发器才可以在端侧中调用&#xff08;错&#xff09; 在column和Row容器组件中&#xff0c;aligntems用于设置子组件在主轴方向上的对齐格式&#xff0c;justifycontent用于设置子组件在交叉轴…

wordpress301重定向传权

方法一&#xff1a;.htaccess文件 如果你有服务器访问权限&#xff0c;可以通过编辑网站根目录下的.htaccess文件来实现301重定向。 打开网站根目录下的.htaccess文件在文件末尾添加以下代码&#xff1a; <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTP_…

Linux访问MySQL数据库(包含实验案例)

1、访问MySQL数据库。 1.1、登录到MySQL服务器 经过安装后的初始化过程&#xff0c;MySQL数据库的默认管理员用户名为"root"&#xff0c;密码为空。 [rootyang ~]# mysql -u root //"-u"选项用于指定认证用户有密码的情况下&#xff0c;使用"-p&qu…

什么是Composer Autoloader?如何使用它?

Composer Autoloader 是 Composer 工具的一部分&#xff0c;它负责自动加载你项目中使用的类。Autoloader 的目的是避免手动包含&#xff08;include 或 require&#xff09;每个类文件&#xff0c;使得类的加载更加自动和灵活。 以下是如何使用 Composer Autoloader 的简要步…

Tcon基础知识

1、TCON&#xff0c;就是 Timing Controller 的缩写。从主芯片输出的要在 TFT 显示屏上显示的数据&#xff0c;在经过 TCON 模块后可以变换生成 Panel 可以直接利用的 DATA 信号和驱动器&#xff08;包括 source driver 和 gate driver&#xff09;的控制信号。 TV 市场上 TCO…

【FPGA/verilog -入门学习10】verilog 查表法实现正弦波形发生器

0&#xff0c;需求 用查找表设计实现一个正弦波形发生器 寻址的位宽是10位&#xff0c;数据量是1024个&#xff0c;输出的数据是16位 1&#xff0c;需求分析 数据量是1024个&#xff1a; x linspace(0,2*pi,1024) 输出数据是16位: y范围&#xff1a;0~2^16 -1 0~65535…

[BUG记录]UART占用CPUload过高问题

目录 关键词平台说明一、背景二、根本原因三、措施 关键词 嵌入式、C语言、autosar、TDA4 平台说明 项目ValueOSautosar OSautosar厂商vector芯片厂商TI编程语言C&#xff0c;C编译器HighTec (GCC) 一、背景 在基于TDA4开发的域控中使用到了UART打印debug信息&#xff0c;不…

Activiti七大接口,28张表详解

Activiti七大接口&#xff0c;28张表详解 7大接口 RepositoryService&#xff1a;提供管理流程部署和流程定义API。 RuntimeService&#xff1a;提供运行时流程实例进行管理与控制API。 TaskService&#xff1a;提供流程任务管理API。 IdentityService&#xff1a;提供对流程…

人生如旅途,重要的是欣赏沿途的风景,而不是匆忙地赶路

人生如旅途&#xff0c;重要的是欣赏沿途的风景&#xff0c;而不是匆忙地赶路

【内存函数】

目录 memcpy使用和模拟实现memmove使用和模拟实现memset使用memcmp使用 1. memcpy使用和模拟实现 void * memcpy ( void * destination, const void * source, size_t num) ; 函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存的位置这个函数在遇到…

Diary23-全网最全的Javascript合集

1.什么是Javascript Javascript是一门世界上最流行的脚本语言 一个合格的后端人员&#xff0c;必须要精通Javascript 2.快速入门 2.1引入Javascript 2.1.1内部标签 <!--script标签内&#xff0c;写Javascript--><script>alert(hello world);</script>…