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集群横向扩展能力,均衡流量压力,让消息集群的秒级服务能力达到百万,Google曾做过此类实验;...
    有货技术阅读 8,840评论 0 1
  • 来源 RabbitMQ是用Erlang实现的一个高并发高可靠AMQP消息队列服务器。支持消息的持久化、事务、拥塞控...
    jiangmo阅读 13,511评论 2 34
  • 关于消息队列,从前年开始断断续续看了些资料,想写很久了,但一直没腾出空,近来分别碰到几个朋友聊这块的技术选型,是时...
    中v中阅读 5,944评论 0 20
  • 关于消息队列,从前年开始断断续续看了些资料,想写很久了,但一直没腾出空,近来分别碰到几个朋友聊这块的技术选型,是时...
    预流阅读 585,886评论 51 787
  • 泛黄的照片失了真,承诺像刀伤了人。 ――钱钟书
    云丹风卿阅读 1,027评论 0 0