当前位置: 首页 > news >正文

Rabbitmq的Federation Exchange

(broker 北京 ) (broker 深圳 ) 彼此之间相距甚远,网络延迟是一个不得不面对的问题。有一个在北京的业务(Client 北京 ) 需要连接 (broker 北京 ) ,向其中的交换器 exchangeA 发送消息,此时的网络延迟很小,(Client 北京 ) 可以迅速将消息发送至 exchangeA 中,就算在开启了 publisherconfirm 机制或者事务机制的情况下,也可以迅速收到确认信息。此时又有个在深圳的业务(Client 深圳 ) 需要向 exchangeA 发送消息,那么(Client 深圳 ) (broker 北京 ) 之间有很大的网络延迟, (Client 深圳 ) 将发送消息至 exchangeA 会经历一定的延迟,尤其是在开启了 publisherconfirm 机制或者事务机制的情况下, (Client 深圳 ) 会等待很长的延迟时间来接收(broker 北京 ) 的确认信息,进而必然造成这条发送线程的性能降低,甚至造成一定程度上的
阻塞。

解决方案 

将业务 (Client 深圳 ) 部署到北京的机房可以解决这个问题,但是如果 (Client 深圳 ) 调用的另些服务都部 署在深圳,那么又会引发新的时延问题,总不见得将所有业务全部部署在一个机房,那么容灾又何以实现? 这里使用 Federation 插件就可以很好地解决这个问题

 

运行rabbitmq集群

 开启插件

在每台机器上开启 federation 相关插件 

rabbitmq-plugins enable rabbitmq_federation
rabbitmq-plugins enable rabbitmq_federation_management

原理图

upstream:表示上游交换机

downstream:表示下游交换机

同步数据的时候是从上游交换机传输给下游交换机,图中node1作为上游传输数据给node2下游交换机,反之如果node2要传输数据给node1,node2则为上游交换急、node1为下游交换机,传输给下游交换机时,下游交换机必须要有fed_exchange才能接收上游的数据

创建fed_exchange

 为node2创建fed_exchange和队列

public static void main(String[] args) throws IOException, TimeoutException {//创建一个连接工厂ConnectionFactory factory = new ConnectionFactory();factory.setHost("192.168.2.3");factory.setUsername("admin");factory.setPassword("123");Connection connection = factory.newConnection();Channel channel = connection.createChannel();channel.exchangeDeclare(FED_EXCHANGE, BuiltinExchangeType.DIRECT);channel.queueDeclare("node2_queue",true,false,false,null);channel.queueBind("node2_queue",FED_EXCHANGE,"routekey");}

 配置 upstream

downstream(node2)配置 upstream(node1)  

 添加 policy

 添加成功

Federation Queue

联邦队列可以在多个 Broker 节点(或者集群)之间为单个队列提供均衡负载的功能。一个联邦队列可以

连接一个或者多个上游队列(upstream queue),并从这些上游队列中获取消息以满足本地消费者消费消息

的需求。

原理图 

 配置上游队列

 配置成功

 

 

http://www.lryc.cn/news/144212.html

相关文章:

  • AIGC - 生成模型
  • 如何优雅地创建一个自定义的Spring Boot Starter
  • Hbase--技术文档--单机docker基础安装(非高可用)
  • React 生命周期新旧对比
  • 云计算存储类型
  • javacv基础03-调用本机摄像头并截图保存到本地磁盘
  • Python读取Windows注册表的实战代码
  • macOS 安装 Homebrew 详细过程
  • 数据结构之树型结构
  • 指针进阶详解
  • QGIS 如何添加天地图
  • PHP8内置函数中的数学函数-PHP8知识详解
  • 云计算企业私有云平台建设方案PPT
  • ORA-01174: DB_FILES be compatible RAC rolling fashion complete outage
  • 线性代数(五) 线性空间
  • kafka--技术文档--spring-boot集成基础简单使用
  • 【核磁共振成像】部分傅里叶重建
  • React中的flushSync与Vue中的nextTick的比较
  • golang设置国内镜像源
  • linux切换到root没有conda环境
  • 数据库——redis介绍
  • 从C语言到C++_34(C++11_下)可变参数+ lambda+function+bind+笔试题
  • 喜报|星瑞格荣获“2022-2023年度国产数据库应用优秀解决方案”奖项
  • 【Spring Cloud系列】- 分布式系统中实现幂等性的几种方式
  • 2023.8.26-2023.9.3 周报【3D+GAN+Diffusion基础知识+训练测试】
  • 如何使用CSS创建渐变阴影?
  • perl send HTTP Request
  • 阿里云CDN缓存预热与刷新以及常见的故障汇总
  • Oracle创建控制列表ACL(Access Control List)
  • 3D模型转换工具HOOPS Exchange助力打造虚拟现实应用程序