在rabbitmq的分布式集群中,我们都是通过配置集群的模式进行分布式部署的,一般都是在内网中使用客户端进行连接调用,但是如果我们遇到大型的分布式集群的时候,比如一个部署在南方,一个部署在北方,然而rabbitmq集群只是部署在了南方,如果北方的分布式程序要来调用rabbitmq集群,那么就只能通过网络来进行远程调用了,在这个过程中我们是不能保证网络的状态的,因此rabbitmq也考虑到了这个因素,因此也就有了federation插件的诞生,它主要解决了以下两个问题:
1.针对不同的erlang版本和rabbitmq版本,只要都是采用的AMQP 0.9.1作为传输协议都可以进行连接,而不需要建立集群。
2.针对广域网中的复杂网络环境,针对不在同一个地区的分布式部署,可以采用federation联合的方式进行数据传输。它也可以在同一台服务器的不同virtual上面进行数交互。
但是我们需要注意的是federation联合的数据在queue中并没有被转移到联合的一方,而是仍然保留在联合的一方,这个后面提到的shovel铲子不一样。
RabbitMq 之 集联插件 federation,具体详情可以参考下面连接:
https://blog.csdn.net/XinhuaShuDiao/article/details/104400834
这里说一下在实际使用当中出现的一些注意事项:
1.exchange 集联是全量级联过来了,意思就是如果两边都有一个相同队列绑定相同的exchange和routingkey,那么两边的队列有相同数据
2.队列级联只会在下游队列中有消费者的时候才会去上游拉去数据,这时候两个mq上的队列中的数据是不同的,相当于下游在替上游分担消费压力,共同消费数据。
3.当下游队列没有消费者的时候,是不会去上游拉去数据的,所以在测试的时候,遇到队列没有级联数据的时候,考虑一下有没有消费者这个原因