rabbitmq federation 聯邦交換機


rabbitmq的聯邦交換機federation

一、為什么要使用聯邦交互機federation

有些時候,我們的rabbitmq為了容災,會部署到不同的城市。
例如北京部署一台rabbitmq,廣州部署一台rabbitmq。

其中廣州rabbitmq有exchangeA。

當北京的應用要發消息到exchangeA的時候,會因為網絡原因,導致發送時間延時。

federation提供了一個能力,讓北京的rabbitmq接受exchanegA的消息。然后再把exchangeA的消息轉發到廣州的exchangeA。

二、federation的原理

插件會在北京(broker1)上會建立一個同名的交換器exchangeA。

同時建立一個內部的交換器exchangeA broker3 ,並通過路由鍵rkA將這兩個交換器綁定起來。

與此同時 Federation 插件還會在 brokerl 上建立一個隊列federation: exchangeA.broker3 井與交換器exchangeA.broker3 進行綁定。

Federation插件會在隊列federation: exchangeA.broker3 與 broker3中的交換器 exchangeA 之間建立一條 AMQP 連接來實時地消費隊列federation: exchangeA.broker3中的數據。

這些操作都是內部的,對外部業務客戶端來說這條 Federation link 建立在brokerl exchangeA broker3 exchangeA之間

三、federation的使用

1、在兩台虛擬機上面各安裝1個rabbitmq實例

在機器1執行命令
docker run -d --hostname rabbit1 --net=host --name myrabbit1 rabbitmq:3.6.15-management
在機器3執行命令
docker run -d --hostname rabbit3 --net=host --name myrabbit3 rabbitmq:3.6.15-management

2、開啟federation插件

在機器1執行命令進入容器
docker exec -it myrabbit1 /bin/bash
執行命令開啟插件
rabbitmq-plugins enable rabbitmq_federation_management

在機器3執行命令進入容器
docker exec -it myrabbit3 /bin/bash
執行命令開啟插件
rabbitmq-plugins enable rabbitmq_federation_management

訪問ip:15672可以見到右邊多了2攔

3、在機器3上面新建eujian.queue隊列、eujian.exchange交換機、和他們之間的綁定。

這里使用命令行去新建(可以用管理后台自行新建)
rabbitmqctl eval 'rabbit_amqqueue:declare({resource, <<"/">>, queue, <<"eujian.queue">>}, true, false, [], none).'
rabbitmqctl eval 'rabbit_exchange:declare({resource, <<"/">>, exchange, <<"eujian.exchange">>}, fanout, true, false, false, []).'
rabbitmqctl eval 'rabbit_binding:add({binding, {resource, <<"/">>, exchange, <<"eujian.exchange">>}, <<"*">>, {resource, <<"/">>, queue, <<"eujian.queue">>}, []}).'

4、新增一個rabbitmq_federation

在機器3執行命令
rabbitmqctl set_parameter federation-upstream f1 '{"uri":"amqp://guest:guest@192.168.2.138:5672","ack-mode":"on-confirm"}'

這里的192.168.2.138改成機器1的ip
或者在管理台用頁面新建

5、新增一個policy

這里是匹配以eujian.開頭的交換機
在機器3執行命令
rabbitmqctl set_policy --apply-to exchanges p1 "eujian.*" '{"federation-upstream":"f1"}'
或者通過管理台新建

[圖片上傳中...(image.png-258e5f-1604834983968-0)]

6、效果驗證

這里點擊federation status

進入機器1的rabbitmq管理台

這里對機器1的exchange發送一條消息

然后在機器2的隊列里面收到消息。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM