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

news2025/5/24 21:33:59

👨🏻‍💻 热爱摄影的程序员
👨🏻‍🎨 喜欢编码的设计师
🧕🏻 擅长设计的剪辑师
🧑🏻‍🏫 一位高冷无情的编码爱好者
大家好,我是 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 的高阶特性,包括存储机制、内存及磁盘告警、流控等内容。

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

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

相关文章

面试热题100(买卖股票的最佳时机)

为什么有人夜里碰到股票问题,辗转反侧睡不着觉?为什么有人看到股票问题心理欢喜直接操作?你是想做哪类人?今天就揭秘股票问题,让你应对股票问题的时候可以如鱼得水。 这种问题一看就是动态规划问题,动态规划…

导入了Junit依赖,但@Test注解依然爆红~

错误描述如下所示&#xff1a; 原因&#xff1a; 解决方法&#xff0c;将<scope>test</scope>删除&#xff0c;再如下所示重新构建项目&#xff1a;

MYSQL视图和mysql触发器(学会并使用day6)

MYSQL视图和mysql触发器 MYSQL视图使用视图的原因视图作用视图规则和限制视图的应用实际操作创建表并查看创建视图视图记录修改修改视图 mysql触发器创建触发器employee表employee02表创建一个触发器t1更新语句并查看employee02表删除触发器查询触发器触发器类型OLD和NEW MYSQL…

用户体验旅程图:改进用户体验的好工具

用户体验旅程图&#xff1a;改进用户体验的好工具 怎么改进体验&#xff0c;是有方法的 用户情绪曲线来衡量用户感觉 趣讲大白话&#xff1a;没有流程刨析&#xff0c;就没法改进 【趣讲信息科技245期】 **************************** 企业管理需要基本的流程的 企业流程简称BP…

“中国网安企业出海20强” | 赛宁网安持续领航国际市场

​​8月2日&#xff0c;斯元商业咨询机构基于对网安行业长期研究数据和公开调研&#xff0c;正式发布了「China’s Top 20 Cybersecurity Tech Going Global」&#xff08;「中国网络安全企业出海20强」&#xff09;研究报告&#xff08;以下简称TOP20报告&#xff09;。 “TO…

【MYSQL】MYSQL学习笔记【基础篇】【未完待续】

文章目录 MYSQL入门一、MYSQL概述1. 数据库相关概念1.1 数据库&#xff0c;数据库管理系统与SQL1.2 数据库种类以及主流数据库管理系统排名1.3 MySQL数据库安装1.4 数据模型 二、SQL2.1 通用语法与注释2.2 SQL分类2.3 DDL2.3.1 数据库操作2.3.2 表操作2.3.2.1 表操作-查询创建2…

UIAutomator2安装及连接手机,我踩的坑都在这儿了

一、大致步骤 大家搜索网络教程&#xff0c;都会看到差不多的安装步骤&#xff1a; 1、本人使用的python3.11 2、OPPO手机 3、安装UIAutomator2&#xff1a; 在命令行中输入&#xff1a;pip install --pre uiautomator2 4、安装配置adb 安装window上&#xff08;其他的自…

excal中遇到数据变成科学计数法的处理方法

1、单元格宽度太小&#xff08;解决办法增加单元格的宽度&#xff09; 2、通过设置单元格格式里面调整 #;#;0;G/通用格式

Python毕业设计 抖音短视频数据分析与可视化 - python 大数据 可视化

文章目录 0 前言1 课题背景2 数据清洗3 数据可视化地区-用户观看时间分界线每周观看观看路径发布地点视频时长整体点赞、完播 4 进阶分析相关性分析留存率 5 深度分析客户价值判断 0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕…

Python实现猫狗分类

不废话了&#xff0c;直接上代码&#xff1a; def load_imagepath_from_csv(csv_name):image_path []with open(csv_name,r) as file:csv_reader csv.reader(file)next(csv_reader)for row in csv_reader:image_path.append(row[0])return image_pathimport csv csv_name &…

如何监控制造业精密空调?看这技能就够了!

在半导体制造、电子元件生产、光学设备制造等领域&#xff0c;精密空调监控是关键的保障&#xff0c;因为微小的温度或湿度变化、微生物或颗粒物污染都可能对产品质量和性能造成巨大影响。 精密空调监控系统作为一种高度智能化的解决方案&#xff0c;能够实时监测和调节生产环境…

IIS站点无法启动,万维网发布服务无法开机启动

对于 IIS 站点无法启动和万维网发布服务无法自动启动的问题&#xff0c;你可以尝试以下的注册表设置修改&#xff1a; 1.启动类型设置&#xff1a; 打开注册表编辑器&#xff0c;导航至以下路径&#xff1a;HKEYLOCALMACHINE\SYSTEM\CurrentControlSet\Services\W3SVC 确保在右…

【参赛送好礼】2023 云原生编程挑战赛·赛道 3 赛题解析助您快速 get 参赛技能

大赛介绍 第四届云原生编程挑战赛&#xff0c;是由阿里云主办&#xff0c;云原生应用平台、天池联合承办的云原生著名品牌赛事。 自 2015 年开始&#xff0c;大赛已经成功举办了八届&#xff0c;并从 2020 年开始升级为首届云原生编程挑战赛&#xff0c;共吸引了超过 53000 支…

18、springboot默认的配置文件及导入额外配置文件

springboot默认的配置文件及导入额外配置文件 ★ Spring Boot默认加载的配置文件&#xff1a; (1) 类加载路径&#xff08;resources目录&#xff09;application.properties|yml &#xff08;相当于JAR包内&#xff09;optional: classpath:/ &#xff08;2&#xff09;类加…

中国农村程序员学习此【ES6】购买大平层,开上帕拉梅拉,迎娶白富美出任CEO走上人生巅峰

注&#xff1a;最后有面试挑战&#xff0c;看看自己掌握了吗 文章目录 比较 var 和 let 关键字的作用域--var可能被随时覆盖-全局变量for循环全局作用域函数作用域块作用域循环作用域HTML 中的全局变量提升改变一个用 const 声明的数组防止对象改变使用箭头函数编写简洁的匿名函…

aws的EC2云服务器

亚马逊官网有免费试用1年的服务器 1. 启动生成实例 1.1 创建实例时需要生成 使用的默认的 Debian 和 一个.pem后缀的秘钥 1.2 网上下一个Mobaxterm ,实例名是公有 IPv4 DNS 地址 ,使用SSH连接,登录名是admin 1.3 登录进去后 输入用户名 admin 后进去,sudo su 切换成 root…

python-爬虫作业

# -*- coding:utf-8 -*-Author: 董咚咚 contact: 2648633809qq.com Time: 2023/7/31 17:02 version: 1.0import requests import reimport xlwt from bs4 import BeautifulSoupurl "https://www.dygod.net/html/gndy/dyzz/" hd {user-Agent:Mozilla/4.0 (Windows N…

项目管理困扰?这里有个6W3H解决方案

引言 在项目管理的过程中&#xff0c;我们经常面临各种各样的挑战和问题。例如&#xff0c;如何确定项目的目标&#xff1f;如何分配资源&#xff1f;何时开始执行项目&#xff1f;在哪里进行项目&#xff1f;这些问题如果没有得到正确的解答&#xff0c;将会严重影响项目的进…

LAXCUS:私域部署的DataBricks

随着大数据技术的不断发展&#xff0c;越来越多的企业开始关注数据的价值和应用。Databricks作为一家开源的大数据平台&#xff0c;为企业提供了强大的数据分析和处理能力。然而&#xff0c;传统的Databricks部署方式存在一定的局限性&#xff0c;比如需要依赖于云服务提供商的…

go 语言实战入门案例之猜数字

文章和代码已经归档至【Github仓库&#xff1a;https://github.com/timerring/backend-tutorial 】或者公众号【AIShareLab】回复 go 也可获取。 猜数字 第一个例子里面&#xff0c;我们会使用 Golang 来构建一个猜数字游戏。 在这个游戏里面&#xff0c;程序首先会生成一个介…