RabbitMQ 教程 | 第8章 跨越集群的界限

👨🏻‍💻 热爱摄影的程序员
👨🏻‍🎨 喜欢编码的设计师
🧕🏻 擅长设计的剪辑师
🧑🏻‍🏫 一位高冷无情的编码爱好者
大家好,我是 DevOps 工程师
欢迎分享 / 收藏 / 赞 / 在看!

这篇 RabbitMQ 教程为学习者提供了全面的内容,从 RabbitMQ 的简介开始,涵盖了消息中间件的概念、RabbitMQ 的安装与使用,以及交换机、队列、路由键等相关概念的介绍。进一步深入,教程探讨了 AMQP 协议、客户端开发向导,以及消息的发送和消费方式。同时,学习者还可以了解消息传输保障、高级特性如死信队列、延迟队列、优先级队列、RPC 实现等。此外,教程还涵盖了 RabbitMQ 的管理、配置、运维、监控和集群管理等重要主题,帮助学习者充分掌握 RabbitMQ 的应用。整篇教程丰富内容详实,适合初学者和有经验的开发者参考学习。

全篇共 11 章,9 万余字。本文:第8章 跨越集群的界限。

第8章 跨越集群的界限

8.1 Federation

学习如何使用 Federation 特性将多个 RabbitMQ 集群连接起来,实现跨集群消息传递。

8.1.1 联邦交换机

联邦交换机(Federation Exchange)是 RabbitMQ 提供的一个插件,用于在不同的 RabbitMQ 集群之间进行消息的转发。它允许将消息从一个集群中的交换机转发到另一个集群中的交换机,从而实现集群之间的消息传递。

联邦交换机的用法如下:

  1. 安装插件: 首先,需要在每个参与消息转发的 RabbitMQ 集群中安装联邦交换机插件。你可以通过管理界面、HTTP API 接口或 CLI 命令行工具来安装插件。
  2. 创建联邦交换机: 在源集群和目标集群中分别创建联邦交换机。联邦交换机是一种特殊类型的交换机,它的类型是 x-federation。
  3. 设置联邦参数: 在源集群中的联邦交换机上设置联邦参数,包括目标集群的地址、目标交换机的名称等。
  4. 绑定交换机: 在源集群的生产者端,将消息发送到联邦交换机上,并在联邦交换机上设置绑定,将消息路由到目标集群的联邦交换机上。
  5. 接收消息: 在目标集群的消费者端,监听目标联邦交换机上的队列,从中接收转发过来的消息。

通过联邦交换机,你可以将消息从一个集群中的交换机转发到另一个集群中的交换机,实现了跨集群的消息传递。这在分布式系统、多数据中心场景下非常有用,可以实现数据的复制、备份和异地容灾等需求。

需要注意的是,联邦交换机是一个实验性的插件,它可能会导致消息重复传递、消息丢失等问题,因此在使用时需要谨慎考虑,确保配置正确且满足业务需求。

8.1.2 联邦队列

联邦队列(Federation Queue)是 RabbitMQ 提供的一个插件,用于在不同的 RabbitMQ 集群之间共享队列。它允许将一个集群中的队列复制到另一个集群中,从而实现队列数据的共享和同步。

联邦队列的使用如下:

  1. 安装插件: 首先,需要在每个参与队列共享的 RabbitMQ 集群中安装联邦队列插件。你可以通过管理界面、HTTP API 接口或 CLI 命令行工具来安装插件。
  2. 创建联邦队列: 在源集群中创建一个联邦队列,并设置它的联邦参数。联邦队列是一种特殊类型的队列,它的类型是 x-federation-upstream。
  3. 设置联邦参数: 在联邦队列上设置联邦参数,包括目标集群的地址、目标队列的名称等。
  4. 消息传递: 在源集群的生产者端,将消息发送到联邦队列上。联邦队列会将消息复制到目标集群的队列中。
  5. 消费消息: 在目标集群的消费者端,从目标队列中接收复制过来的消息。

通过联邦队列,你可以在不同的 RabbitMQ 集群之间共享队列,实现队列数据的复制和同步。这对于跨集群的数据复制、异地容灾等场景非常有用。

需要注意的是,联邦队列是一个实验性的插件,它可能会导致消息重复传递、消息丢失等问题,因此在使用时需要谨慎考虑,确保配置正确且满足业务需求。同时,由于数据的复制可能会增加网络带宽和延迟,因此需要根据实际情况来决定是否使用联邦队列。

8.1.3 Federation 的使用

配置 Federation 参数是建立集群之间连接的关键步骤。在 RabbitMQ 中,要通过 Federation 插件实现集群之间的连接和数据共享,需要进行以下配置:

  1. 安装 Federation 插件: 在每个参与集群之间连接的 RabbitMQ 节点上,需要先安装 Federation 插件。可以通过以下命令来安装 Federation 插件:
rabbitmq-plugins enable rabbitmq_federation
rabbitmq-plugins enable rabbitmq_federation_management
  1. 配置 Federation 参数: 在源集群和目标集群中,分别对 Federation 进行配置。配置参数涉及到联邦交换机、联邦队列和联邦参数。
    • 配置联邦交换机: 在源集群和目标集群中,分别创建联邦交换机。联邦交换机的类型是 x-federation。可以通过管理界面、HTTP API 接口或 CLI 命令行工具来创建联邦交换机。
    • 配置联邦参数: 在联邦交换机上设置联邦参数,包括目标集群的地址、目标交换机的名称等。可以使用管理界面、HTTP API 接口或 CLI 命令行工具来设置联邦参数。
    • 配置联邦队列(可选): 如果需要共享队列数据,可以在源集群中创建联邦队列。联邦队列的类型是 x-federation-upstream。可以使用管理界面、HTTP API 接口或 CLI 命令行工具来创建联邦队列。
  1. 消息传递: 在源集群的生产者端,将消息发送到联邦交换机上。联邦交换机会将消息转发到目标集群的交换机上。如果配置了联邦队列,联邦队列会将消息复制到目标集群的队列中。
  2. 消费消息: 在目标集群的消费者端,从目标队列中接收消息。

配置完 Federation 参数后,集群之间的连接就建立起来了,可以实现消息的转发和队列的共享。但是需要注意的是,Federation 插件是一个实验性的插件,使用时需要谨慎考虑,确保配置正确且满足业务需求。同时,数据的复制可能会增加网络带宽和延迟,因此需要根据实际情况来决定是否使用 Federation 插件。

8.2 Shovel

了解 Shovel 的特性和用法,通过 Shovel 可以在不同集群之间进行消息的复制和转发。

8.2.1 Shovel的原理

Shovel 是 RabbitMQ 提供的一个插件,用于在不同的 RabbitMQ 集群之间进行消息的复制和转发。它的工作原理是通过创建 Shovel 任务,在不同的集群之间建立连接,然后将消息从源队列复制到目标队列。

消息传递的过程如下:

  1. 安装 Shovel 插件: 首先,需要在每个参与消息复制的 RabbitMQ 节点上安装 Shovel 插件。你可以通过管理界面、HTTP API 接口或 CLI 命令行工具来安装插件。
  2. 配置 Shovel 任务: 在源集群和目标集群中,分别创建 Shovel 任务。Shovel 任务定义了消息复制的来源和目标。配置 Shovel 任务时需要指定以下信息:
    • 源队列:源集群中的队列,消息从这里开始复制。
    • 目标队列:目标集群中的队列,消息复制到这里。
    • 目标集群地址:目标集群的地址和凭据,用于建立连接。
  1. 消息复制: 在源集群的生产者端,将消息发送到源队列上。Shovel 任务会将消息复制到目标集群的目标队列中。
  2. 消费消息: 在目标集群的消费者端,从目标队列中接收复制过来的消息。

通过 Shovel 插件,你可以在不同的 RabbitMQ 集群之间实现消息的复制和转发,从而实现数据的跨集群同步。这在数据备份、异地容灾等场景非常有用。

需要注意的是,Shovel 插件是一个实验性的插件,使用时需要谨慎考虑,确保配置正确且满足业务需求。同时,消息复制可能会增加网络带宽和延迟,因此需要根据实际情况来决定是否使用 Shovel 插件。

8.2.2 Shovel 的使用

配置和使用 Shovel 进行消息的复制和转发需要遵循以下步骤:

  1. 安装 Shovel 插件: 首先,确保在所有参与消息复制的 RabbitMQ 节点上安装了 Shovel 插件。你可以使用以下命令来启用 Shovel 插件:
rabbitmq-plugins enable rabbitmq_shovel
rabbitmq-plugins enable rabbitmq_shovel_management
  1. 创建 Shovel 任务: 在 RabbitMQ 管理界面或通过 HTTP API 接口,创建 Shovel 任务。在创建 Shovel 任务时,需要提供以下配置参数:
    • 源地址:指定消息复制的源集群地址和凭据。
    • 目标地址:指定消息复制的目标集群地址和凭据。
    • 源队列:指定源集群中的队列,消息从这里开始复制。
    • 目标队列:指定目标集群中的队列,消息复制到这里。
    • 额外参数(可选):可以设置一些额外的参数,如复制间隔、最大传输数等。
  1. 启动 Shovel 任务: 创建 Shovel 任务后,默认是未启动状态。你需要手动启动 Shovel 任务,才能使消息复制和转发开始。
  2. 消息复制: 在源集群的生产者端,将消息发送到源队列上。Shovel 任务会将消息复制到目标集群的目标队列中。
  3. 消费消息: 在目标集群的消费者端,从目标队列中接收复制过来的消息。

通过上述步骤,你就可以配置和使用 Shovel 插件来实现消息的复制和转发。这在数据备份、跨数据中心同步等场景中非常有用。需要注意的是,Shovel 插件是一个实验性的插件,使用时需要谨慎考虑,确保配置正确且满足业务需求。同时,消息复制可能会增加网络带宽和延迟,因此需要根据实际情况来决定是否使用 Shovel 插件。

8.2.3 案例:消息堆积的治理

使用 Shovel 可以解决消息堆积问题和实现消息的流量控制。消息堆积是指当目标队列的消费者无法及时处理消息时,消息会在目标队列中积累,导致队列过大。通过 Shovel,我们可以将消息从目标队列复制到另一个中间队列,并在中间队列上设置流量控制策略,从而实现消息的流量控制。

以下是使用 Shovel 解决消息堆积问题和实现消息的流量控制的步骤:

  1. 安装 Shovel 插件: 确保在参与消息复制的 RabbitMQ 节点上安装了 Shovel 插件。如果尚未安装,可以使用以下命令启用 Shovel 插件:
rabbitmq-plugins enable rabbitmq_shovel
rabbitmq-plugins enable rabbitmq_shovel_management
  1. 创建中间队列: 在目标集群中创建一个中间队列。中间队列是消息复制的中转队列,用于暂存从源队列复制过来的消息。
  2. 配置 Shovel 任务: 创建一个 Shovel 任务,将源队列中的消息复制到中间队列。在创建 Shovel 任务时,需要指定以下配置参数:
    • 源地址:指定消息复制的源集群地址和凭据。
    • 目标地址:指定消息复制的目标集群地址和凭据。
    • 源队列:指定源集群中的队列,消息从这里开始复制。
    • 目标队列:指定中间队列,消息复制到这里。
  1. 设置流量控制策略: 在中间队列上设置流量控制策略,以控制消息的流入速率。可以设置最大队列长度、最大队列深度、最大队列字节数等参数,根据实际情况来限制中间队列的大小。
  2. 从中间队列消费消息: 在目标集群的消费者端,从中间队列中接收消息。由于中间队列已经进行了流量控制,消费者可以按照自身的处理能力来消费消息,避免了消息堆积问题。

通过上述步骤,你可以使用 Shovel 插件将源队列的消息复制到中间队列,并在中间队列上实现流量控制,从而解决消息堆积问题。需要注意的是,合理设置流量控制策略是非常重要的,以避免消息的丢失或过多积累。在实际使用中,根据业务需求和资源情况,灵活调整流量控制策略。

8.3 小结

本章介绍了 RabbitMQ 的跨集群特性,包括 Federation 和 Shovel 的使用。在下一章中,我们将学习 RabbitMQ 的高阶特性,包括存储机制、内存及磁盘告警、流控等内容。

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

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

相关文章

轻量化YOLOv5改进 | 结合repghost结构冲参数化网络,实现轻量化和加速推理,

RepGhost: A Hardware-Efficient Ghost Module via Re-parameterization 论文总结本文改进repghost 核心代码测试参数量和计算量🔥🔥🔥 “引入RepGhostNet以加速CNN网络推理” “网络宽度的自定义调整:无缝嵌入YOLOv5” “通过结构重参数化优化网络性能” “实现高效和…

ChatGPT能否撰写科研论文?

ChatGPT,这款被许多人誉为语言处理领域的“黑马”,究竟能否应用于撰写科研论文?近期,以色列理工学院生物学家兼数据科学家Roy Kishony带领的团队,针对这一问题进行了系列研究,其结果已在《Nature》杂志上发…

【运维】在阿里云上搭建自己的图床,配合PicGo和Typora使用

本文将详细介绍如何在阿里云上搭建自己的图床,包括购买OSS服务、配置域名解析、创建OSS存储桶和设置图片上传规则等步骤。希望对您有所帮助! 一、购买OSS服务 首先,我们需要在阿里云官网购买OSS(Object Storage Service)服务。OSS是阿里云提…

springBoot多数据源使用tdengine(3.0.7.1)+MySQL+mybatisPlus+druid连接池

一、安装部署 1、我这里使用的 3.0.7.1版本,因为我看3.x版本已经发布了一年了,增加了很多新的功能,而且3.x官方推荐,对于2.x的版本,官网都已经推荐进行升级到3.x,所以考虑到项目以后的发展,决定…

django bootstrap html实现左右布局,带折叠按钮,左侧可折叠隐藏

一、实现的效果 在django项目中,需要使用bootstrap 实现一个左右分布的布局,左侧区域可以折叠隐藏起来,使得右侧的显示区域变大。(为了区分区域,左右加了配色,不好看的修改颜色即可) 点击折叠按钮,左侧区域隐藏,右侧区域铺满: 二、实现思路 1、使用col-md属性,让左…

SOC FPGA之流水灯设计

一、DS-5简介 Altera Soc EDS开发套件的核心是Altera版ARM Development Studio 5(DS-5)工具包,为SoC器件提供了完整的嵌入式开发环境、FPGA自适应调试和对Altera工具的兼容。 1.1 DS-5 eclipse破解 首先下载破解器 然后进入cmd运行,进入到破解器所在文…

【八】mybatis 日志模块设计

mybatis 日志模块设计 简介:闲来无事阅读一下mybatis的日志模块设计,学习一下优秀开源框架的设计思路,提升自己的编码能力 模块设计 在Mybatis内部定义了4个级别:Error:错误 、warn:警告、debug:调试、trance,日志优…

【计算机网络】应用层协议 -- DNS协议

文章目录 1. DNS背景2. 域名简介3. 域名解析过程4. 使用dig查看DNS过程 1. DNS背景 DNS(Domain Name System,域名系统)协议,是一个用来将域名转化为IP地址的应用层协议。 TCP/IP当中通过IP地址和端口号的方式,来确定…

C语言之结构体篇(简)

结构体 结构体的认知结构体的声明一般声明特殊声明匿名结构体类型 结构体自引用结构体变量的定义与初始化结构体变量的定义结构体变量的初始化 结构体传参结构体内存对齐位段位段声明位段的内存分配位段跨平台问题: 结构体是由我们自己创造的一种类型,使得C语言有能…

js-匈牙利算法

匈牙利算法 素数伴侣新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个注脚注释也是必不可少的K…

H5打包封装小程序系统开发

H5打包封装小程序系统开发 H5打包封装小程序系统开发是指将H5页面打包封装成小程序的开发过程。下面是一个简单的步骤: 准备工作:首先,需要准备好H5页面的代码和资源文件。确保H5页面在浏览器中正常运行,并且没有依赖于浏览器特…

『赠书活动 | 第十六期』《深入浅出Java虚拟机:JVM原理与实战》

💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! 『赠书活动 | 第十六期』 本期书籍:《深入浅出Java虚拟机:JVM原理与实战》 赠书规则:评论区:点赞&#xff…

将Visio和Excel导出成没有白边的PDF文件

1、VISIO如何无白边导出pdf格式 在使用Latex时,要导入矢量图eps格式。但是VISIO无法输出eps格式,这就需要将其导出为pdf。但是导出pdf时,往往会有大量的白边。VISIO无白边导出pdf格式的方法如下: 1.文件——开发工具——显示sha…

并发 如何创建线程 多线程

进程:一个程序的执行过程 线程:一个方法就是一个线程 并发:多个线程抢夺一个资源 操作同一个对象 创建线程方法1 //创建线程方法1 继承Thread类 重写润方法 调用start开启线程 public class TestThead extends Thread{Overridepublic voi…

redis 高级篇 redis 源码的读取分析

一 redis源码分析 1.1 源码分析 1每一个kv键值对应有一个dictEntry。 2.底层数据结构

景联文科技高质量成品数据集上新啦!

景联文科技近期上新多个成品数据集,包含图像、视频等多种类型的数据,涵盖丰富的场景,可满足不同模型的多元化需求。 高质量成品数据集可用于训练和优化模型,使得模型能够更加全面和精准地理解和处理任务,更好地应对复…

eclipse was unable to locate its companion shared library

当转移或者Copy工程时, eclipse was unable to locate its companion shared library eclipse.ini 里面的路径配置错误导致 --launcher.library C:/Users/**/.p2/pool/plugins/org.eclipse.equinox. launcher.win32.win32.x86_64_1.2.700.v20221108-1024 -product …

17. Spring 事务

目录 1. 事务定义 2. MySQL 中的事务使用 3. 没有事务时的插入 4. Spring 编程式事务 5. Spring 声明式事务 5.1 Transactional 作用范围 5.2 Transactional 参数说明 5.3 Transactional 工作原理 1. 事务定义 将⼀组操作封装成一个执行单元(封装到一起…

人工智能安全-2-非平衡数据处理

0 提纲 现象与原因非平衡数据处理方法概览数据预处理层面特征层算法层面1 现象与原因 非平衡数据分类问题:在网络信息安全问题中,诸如恶意软件检测、SQL注入、不良信息检测等许多问题都可以归结为机器学习分类问题。这类机器学习应用问题中,普遍存在非平衡数据的现象。 产…

java系列之list集合分组

文章目录 前言一、list是什么?二、list集合分组总结 前言 在Java编程中,List集合是一种常用的数据结构,用于存储一组元素。有时候,我们需要对List集合中的元素进行分组操作,即将相同属性或特征的元素归类到一组。这种…