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),并从这些上游队列中获取消息以满足本地消费者消费消息

的需求。

原理图

配置上游队列

配置成功

相关推荐
nomi-糯米21 分钟前
Fisco Bcos 2.11.0配置console控制台2.10.0及部署调用智能合约
分布式·网络安全·区块链·智能合约·分布式账本
喜欢猪猪42 分钟前
Kafka是如何保证数据的安全性、可靠性和分区的
分布式·kafka
芊言芊语43 分钟前
分布式消息服务Kafka版的详细解析和配置方式
分布式·kafka
Alluxio1 小时前
选择Alluxio来解决AI模型训练场景数据访问的五大理由
大数据·人工智能·分布式·ai·语言模型
武子康2 小时前
大数据-133 - ClickHouse 基础概述 全面了解
java·大数据·分布式·clickhouse·flink·spark
.生产的驴2 小时前
SpringBoot 消息队列RabbitMQ 消费者确认机制 失败重试机制
java·spring boot·分布式·后端·rabbitmq·java-rabbitmq
人生百态,人生如梦3 小时前
大数据处理从零开始————3.Hadoop伪分布式和分布式搭建
hadoop·分布式
芊言芊语4 小时前
分布式缓存服务Redis版解析与配置方式
redis·分布式·缓存
月夜星辉雪8 小时前
【RabbitMQ 项目】服务端:路由交换模块
分布式·rabbitmq
super_journey8 小时前
RabbitMq中交换机(Exchange)、队列(Queue)和路由键(Routing Key)
分布式·中间件·rabbitmq