在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.當下游隊列沒有消費者的時候,是不會去上游拉去數據的,所以在測試的時候,遇到隊列沒有級聯數據的時候,考慮一下有沒有消費者這個原因