RabbitMQ插件详解:rabbitmq_recent_history_exchange【RabbitMQ 七】

简介: RabbitMQ插件详解:rabbitmq_recent_history_exchange【RabbitMQ 七】

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

@[TOC](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
  1. 重启 RabbitMQ 以使更改生效:
service rabbitmq-server restart
  1. 创建 “recent history” 交换机:使用 RabbitMQ 管理界面或者命令行工具创建 “recent history” 交换机。以下是通过 RabbitMQ 管理界面的步骤:
  • 登录 RabbitMQ 管理界面(通常在 http://localhost:15672/)。
  • 在 “Exchanges” 选项卡中,点击 “Add a new exchange”。
  • 在 “Type” 选择框中选择 “recent_history”。
  • 输入交换机的名称,例如 “history_exchange”。
  • 点击 “Add exchange”。
  1. 配置交换机参数:可以通过 RabbitMQ 管理界面或者命令行工具配置 “recent history” 交换机的参数。以下是通过 RabbitMQ 管理界面的步骤:
  • 在 “Exchanges” 选项卡中,找到刚刚创建的 “history_exchange”。
  • 点击 “history_exchange” 进入交换机详情页面。
  • 在 “Arguments” 部分,可以配置参数。例如,可以配置 “x-message-ttl” 参数来设置消息的存活时间。
  • 点击 “Save” 保存更改。
  1. 在应用中使用 “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”。
  1. 在应用中使用 “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());
});
  1. 查看和管理最近的消息历史:
  • 在 RabbitMQ 管理界面的 “Exchanges” 选项卡中,你可以查看每个 “recent history” 交换机上的消息历史记录。
  • 在 “Queues” 选项卡中,你可以查看每个队列(对应每个聊天室的队列)上的消息历史记录。

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

结语

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

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
6月前
|
消息中间件 监控 物联网
MQTT的奇妙之旅:探索RabbitMQ Web MQTT插件的威力【RabbitMQ 十一】
MQTT的奇妙之旅:探索RabbitMQ Web MQTT插件的威力【RabbitMQ 十一】
215 0
UE DTMqtt 虚幻引擎 Mqtt 客户端插件说明
UE DTMqtt 虚幻引擎 Mqtt 客户端插件说明
516 0
|
6月前
|
消息中间件 存储 运维
RabbitMQ插件详解:rabbitmq_message_timestamp【Rabbitmq 五】
RabbitMQ插件详解:rabbitmq_message_timestamp【Rabbitmq 五】
128 1
|
6月前
|
消息中间件 存储 负载均衡
分布式消息传递新时代:深入了解RabbitMQ_sharding插件的精髓【RabbitMQ 八】
分布式消息传递新时代:深入了解RabbitMQ_sharding插件的精髓【RabbitMQ 八】
129 0
|
6月前
|
消息中间件 监控 前端开发
RabbitMQ插件详解:rabbitmq_web_stomp【RabbitMQ 六】
RabbitMQ插件详解:rabbitmq_web_stomp【RabbitMQ 六】
406 0
|
6月前
|
消息中间件
rabbitmq插件升级-延时队列为列
rabbitmq插件升级-延时队列为列
661 15
|
消息中间件
RabbitMq没开启rabbitmq_management插件控制台报错Node statistics not available
RabbitMq没开启rabbitmq_management插件控制台报错Node statistics not available
|
6月前
|
消息中间件 Docker 微服务
RabbitMQ入门指南(十一):延迟消息-延迟消息插件
RabbitMQ是一个高效、可靠的开源消息队列系统,广泛用于软件开发、数据传输、微服务等领域。本文主要介绍了DelayExchange插件、延迟消息插件实现延迟消息等内容。
938 0
RabbitMQ实现延迟消息居然如此简单,整个插件就完事了
RabbitMQ实现延迟消息的方式有两种,一种是使用死信队列实现,另一种是使用延迟插件实现。死信队列实现我们以前曾经讲过这次我们讲个更简单的,使用延迟插件实现。
|
消息中间件
RabbitMQ延时队列插件rabbitmq_delayed_message_exchange-3.8.0.ez,有需要的朋友可自取
RabbitMQ延时队列插件rabbitmq_delayed_message_exchange-3.8.0.ez,有需要的朋友可自取
165 0