RabbitMQ Federation
Federation (聯(lián)合) 常常用于 RabbitMQ 集群升級時做集群間消息同步以及負載均衡等場景。本文記錄了 Federation 在 WebUI 配置方法以及本地簡單坐下效果測試。
插件安裝
通過以下命令開啟 federation 插件,以及在 web 管理終端配置聯(lián)合隊列
rabbitmq-plugins enable rabbitmq_federation
rabbitmq-plugins enable rabbitmq_federation_management
隊列配置
開啟插件后在管理終端 admin tab頁下就可以看到相關(guān)的配置項了。通過界面上指定要做聯(lián)合的隊列的具體信息,就可以指定要聯(lián)合的隊列信息了。

本地測試
測試環(huán)境搭建
下面通過本地搭建測試環(huán)境來觀察下聯(lián)合隊列的效果。
首先在 mac 上安裝 RabbitMQ,具體安裝方法見官方文檔。這里至少需要兩臺 RabbitMQ,第二臺采用 docker 方式建立。
docker環(huán)境搭建
首先拉取帶管理終端的 docker 鏡像
docker pull rabbitmq:management
啟動 docker 容器,映射容器內(nèi)部15672端口到本地的45672端口來訪問,同時開放映射 docker 的5672端口到本地的18888端口以便做聯(lián)合時指定URI
docker run -d --hostname my-rabbit -p 45672:15672 -p 18888:5672 --name test-rabbit rabbitmq:management
啟動之后訪問 localhost:45672 就可以訪問 docker 上 RabbitMQ 的管理終端了。
建立聯(lián)合
訪問本地的管理終端(localhost:15672),將本地的 celery 隊列聯(lián)合到 docker 上的 celery 隊列。
建立 upstream
首先需要通過 upstream 指定要聯(lián)合的隊列所在的 RabbitMQ 的地址和訪問信息。

建立 policy
要想聯(lián)合隊列生效,還要建立 policy。通過 policy 指定策略生效的范圍。

完成之后通過
Federation Status 查看生效情況。
啟動消費者
啟動消費者連接到本地的 RabbitMQ 上,可以發(fā)現(xiàn)被聯(lián)合的上游隊列也出現(xiàn)了該消費者,雖然 docker 內(nèi)的 RabbitMQ 上實際并沒連接消費者。


通過 docker 內(nèi)的 RabbitMQ 投遞消息,最終會被連接本地 RabbitMQ 的消費者收取,從而達到了聯(lián)合的目的~
需要注意的是,如果消費者連接到被聯(lián)合的隊列上即 docker 內(nèi)的隊列時,消費者不會同步到兩個 RabbitMQ 上。