热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

RabbitMQ双活方案

点击上方“IT那活儿”,关注后了解更多内容,不管IT什么活儿,干就完了!!!

点击上方“IT那活儿”,关注后了解更多内容,不管IT什么活儿,干就完了!!!




适用场景



RabbitMQ本身的优点众多,大家最看好的便是它的异步化提高系统抗峰值能力,然后便是系统及功能结构解耦,那么照此两点来说,它在整个系统中的作用是至关重要的。

那么如此重要,当然要考虑他的高可用性;混合云、多可用区、多机房的部署架构是大家普遍追寻的方案,但是怎么避免网络因素带来的影响呢?

RabbitMQ有很多种高可用方案,本文我们重点讲述federation插件方式,此方案一般适用于大型的分布式集群,可以避免因网络问题带来的消息差异、脑裂等情况。

Federation插件使RabbitMQ在不同Broker节点间进行消息传递而无须建立集群,在不同管理域(不同的用户和vhost、不同版本的RabbitMQ Erlang上)中的Broker或集群间传递消息,能容忍不稳定的网络连接情况。




前期准备

两台安装rabbitmq的机器 ,进行federation插件测试。

配置federation插件

1. 开启federation插件

rabbitmq-plugins enable rabbitmq_federationrabbitmq-plugins enable rabbitmq_federation_management

2. 登入控制台配置策路

federation中的参数信息:

  • name: 新增的federation联合插件的上游名称,这个可以随便取名。

  • uri:上游federation联合rabbitmq的地址,上游是指订阅的服务器节点。

  • prefect count:一次性从上游rabbitmq服务器预期数据的最大数量,默认是1000。

  • reconnect delay:网络连接失败后下次重连的等待时间,默认是5秒。

  • Acknowledgement Mode:消息确认方式,on-confirm、on-publish和no-ack。含义分布如下:

① on-confirm,默认的确认方式,它需要下游消费者进行消息确认后才删除,是最可靠的消息处理方式。不管是网络错误还是消息节点失败都不会丢失消息。这种方式处理最慢。
② on-publish,上游节点将消息发送给下游节点后消息就进行确认了,这种情况在网络错误时可以进行重发,但是在消息节点失败时会丢失消息。
③ no-ack,不需要确认就可以进行消息删除。这种方式最不安全对于消息来说,但是却是最快的。
  • Trust User-ID:是否信任从上游服务器传来的用户id,默认是yes,设置成no,将会清空从上游服务器传来的user id信息。

接下来是专门提供给federation exchange交换器的参数:

  • Exchange:定义上游服务器的联合的exchange名称,默认情况下的取名与联合的exchange名称相同。

  • max hops:消息在被放弃或者说被消费前消息可以传递的最大的联合federation 连接长度,默认是1,一般情况连接长度等于联合的节点数量-1。

  • Expires:上游服务器节点保持节点信息的最长时间,单位毫秒,默认的是永久保存。

  • Message TTL:在上游节点中消息未被传递时可以保存的时长,单位毫秒,默认是永久保存。

  • HA Policy:检查一个联合exchange的上游queue中的x-ha-policy,用于确认该queue是否是一个HA的queue,默认是none表示不是一个HA的queue。

最后是federation queue的参数:

  • Queue:定义上游服务器的联合的queue名称,默认情况下的取名与联合的queue名称相同。

3. 定义联合查询federation

4. 定义同步策略policy

  • name标识名称。

  • pattern表示匹配的表达式,用法是正则表达式。

  • apply to表示应用在exchange还是queue上面,亦或两者都使用。

  • priority表示优先级,值越大,优先级越高。

  • definition用于定义使用的配置,这里我们定义的是federation联合,它有federation upstream set和 federation upstream两种方式,set表示集合,定义需要该策略的所有上游名称,一般我们都取值为all。

5. 状态查询

完成定义策略后,那么就会看到同步策略中开起的exchange、queue状态。

通过界面已经看到了federation联合查询对应的exchange和queue已经处于运行状态了,这个时候我们可以看到另一台控制台上的connection页签。

这个时候在rabbitmq服务器上面已经有了federation标志的连接,也就是我们刚才在前面定义的federation,在连接上面可以看到federation的名称及policy,说明已经同步到了另一台机器上面,同时我们也可以在exchange页签及queue页签中看到在另一台机器上面定义的federation联合exchange和queue名称。

功能验证

向交换机插入消息,验证是否可以进行同步:

登录另一个控制台:

从图中可以看到已经有一条消息过来,我们检查消息是否正确。

同步消息和手动插入的消息一致,至此federation插件验证完成。


本文作者:刘玉翀

本文来源:IT那活儿(上海新炬王翦团队)



推荐阅读
  • 本文详细介绍了HDFS的基础知识及其数据读写机制。首先,文章阐述了HDFS的架构,包括其核心组件及其角色和功能。特别地,对NameNode进行了深入解析,指出其主要负责在内存中存储元数据、目录结构以及文件块的映射关系,并通过持久化方案确保数据的可靠性和高可用性。此外,还探讨了DataNode的角色及其在数据存储和读取过程中的关键作用。 ... [详细]
  • ### 优化后的摘要本学习指南旨在帮助读者全面掌握 Bootstrap 前端框架的核心知识点与实战技巧。内容涵盖基础入门、核心功能和高级应用。第一章通过一个简单的“Hello World”示例,介绍 Bootstrap 的基本用法和快速上手方法。第二章深入探讨 Bootstrap 与 JSP 集成的细节,揭示两者结合的优势和应用场景。第三章则进一步讲解 Bootstrap 的高级特性,如响应式设计和组件定制,为开发者提供全方位的技术支持。 ... [详细]
  • RocketMQ在秒杀时的应用
    目录一、RocketMQ是什么二、broker和nameserver2.1Broker2.2NameServer三、MQ在秒杀场景下的应用3.1利用MQ进行异步操作3. ... [详细]
  • REST与RPC:选择哪种API架构风格?
    在探讨REST与RPC这两种API架构风格的选择时,本文首先介绍了RPC(远程过程调用)的概念。RPC允许客户端通过网络调用远程服务器上的函数或方法,从而实现分布式系统的功能调用。相比之下,REST(Representational State Transfer)则基于资源的交互模型,通过HTTP协议进行数据传输和操作。本文将详细分析两种架构风格的特点、适用场景及其优缺点,帮助开发者根据具体需求做出合适的选择。 ... [详细]
  • 修复一个 Bug 竟耗时两天?真的有那么复杂吗?
    修复一个 Bug 竟然耗费了两天时间?这背后究竟隐藏着怎样的复杂性?本文将深入探讨这个看似简单的 Bug 为何会如此棘手,从代码层面剖析问题根源,并分享解决过程中遇到的技术挑战和心得。 ... [详细]
  • 本文提供了 RabbitMQ 3.7 的快速上手指南,详细介绍了环境搭建、生产者和消费者的配置与使用。通过官方教程的指引,读者可以轻松完成初步测试和实践,快速掌握 RabbitMQ 的核心功能和基本操作。 ... [详细]
  • 应用链时代,详解 Avalanche 与 Cosmos 的差异 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • Java高并发与多线程(二):线程的实现方式详解
    本文将深入探讨Java中线程的三种主要实现方式,包括继承Thread类、实现Runnable接口和实现Callable接口,并分析它们之间的异同及其应用场景。 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 该大学网站采用PHP和MySQL技术,在校内可免费访问某些外部收费资料数据库。为了方便学生校外访问,建议通过学校账号登录实现免费访问。具体方案可包括利用学校服务器作为代理,结合身份验证机制,确保合法用户在校外也能享受免费资源。 ... [详细]
  • Python 程序转换为 EXE 文件:详细解析 .py 脚本打包成独立可执行文件的方法与技巧
    在开发了几个简单的爬虫 Python 程序后,我决定将其封装成独立的可执行文件以便于分发和使用。为了实现这一目标,首先需要解决的是如何将 Python 脚本转换为 EXE 文件。在这个过程中,我选择了 Qt 作为 GUI 框架,因为之前对此并不熟悉,希望通过这个项目进一步学习和掌握 Qt 的基本用法。本文将详细介绍从 .py 脚本到 EXE 文件的整个过程,包括所需工具、具体步骤以及常见问题的解决方案。 ... [详细]
  • (1)前期知识:1. 单机架构:单一服务器计算机——其处理能力和存储容量有限。2. 集群架构(负载均衡器与多节点服务器)——通过增加节点数量来提升系统性能和可靠性,实现高效的任务分配和资源利用。 ... [详细]
  • 第二章:Kafka基础入门与核心概念解析
    本章节主要介绍了Kafka的基本概念及其核心特性。Kafka是一种分布式消息发布和订阅系统,以其卓越的性能和高吞吐量而著称。最初,Kafka被设计用于LinkedIn的活动流和运营数据处理,旨在高效地管理和传输大规模的数据流。这些数据主要包括用户活动记录、系统日志和其他实时信息。通过深入解析Kafka的设计原理和应用场景,读者将能够更好地理解其在现代大数据架构中的重要地位。 ... [详细]
  • 在CentOS 7上部署WebRTC网关Janus
    在CentOS 7上部署WebRTC网关Janus ... [详细]
author-avatar
Yao2524_420
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有