RabbitMQ联合队列的搭建和本地测试

RabbitMQ Federation

Federation (联合) 常常用于 RabbitMQ 集群升级时做集群间消息同步以及负载均衡等场景。本文记录了 Federation 在 WebUI 配置方法以及本地简单坐下效果测试。

插件安装

通过以下命令开启 federation 插件,以及在 web 管理终端配置联合队列

rabbitmq-plugins enable rabbitmq_federation
rabbitmq-plugins enable rabbitmq_federation_management

队列配置

开启插件后在管理终端 admin tab页下就可以看到相关的配置项了。通过界面上指定要做联合的队列的具体信息,就可以指定要联合的队列信息了。

新增 upstream

本地测试

测试环境搭建

下面通过本地搭建测试环境来观察下联合队列的效果。

首先在 mac 上安装 RabbitMQ,具体安装方法见官方文档。这里至少需要两台 RabbitMQ,第二台采用 docker 方式建立。

docker环境搭建

首先拉取带管理终端的 docker 镜像

docker pull rabbitmq:management

启动 docker 容器,映射容器内部15672端口到本地的45672端口来访问,同时开放映射 docker 的5672端口到本地的18888端口以便做联合时指定URI

docker run -d --hostname my-rabbit  -p 45672:15672 -p 18888:5672 --name test-rabbit rabbitmq:management

启动之后访问 localhost:45672 就可以访问 docker 上 RabbitMQ 的管理终端了。

建立联合

访问本地的管理终端(localhost:15672),将本地的 celery 队列联合到 docker 上的 celery 队列。

建立 upstream

首先需要通过 upstream 指定要联合的队列所在的 RabbitMQ 的地址和访问信息。


upstream 状态
建立 policy

要想联合队列生效,还要建立 policy。通过 policy 指定策略生效的范围。

policy

完成之后通过 Federation Status 查看生效情况。
联合队列

启动消费者

启动消费者连接到本地的 RabbitMQ 上,可以发现被联合的上游队列也出现了该消费者,虽然 docker 内的 RabbitMQ 上实际并没连接消费者。


本地集群的消费者

docker集群的消费者

通过 docker 内的 RabbitMQ 投递消息,最终会被连接本地 RabbitMQ 的消费者收取,从而达到了联合的目的~

需要注意的是,如果消费者连接到被联合的队列上即 docker 内的队列时,消费者不会同步到两个 RabbitMQ 上。

你可能感兴趣的:(RabbitMQ联合队列的搭建和本地测试)