为了能够使用 Federation 功能,需要配置以下两个内容:
(1)需要配置一个或多个 upstream,每个 upstream 均定义了到其他节点的 Federation link(链接)。这个配置可以通过设置运行时的参数(Runtime Parameter)来完成,也可以通过 federation management 插件来完成。
(2)需要定义匹配交换器或者队列的一种/多种策略(Policy)。
Federation 插件默认已在 RabbitMQ 发布包中,执行 rabbitmq-plugins enable rabbitmq_federation 命令可以开启 Federation 功能。
使用 rabbitmq-plugins enable 命令开启 rabbitmq_federation 插件,如下:
[root@hxstrive ~]# rabbitmq-plugins enable rabbitmq_federation Enabling plugins on node rabbit@hxstrive: rabbitmq_federation The following plugins have been configured: rabbitmq_federation rabbitmq_management rabbitmq_management_agent rabbitmq_web_dispatch Applying plugin configuration to rabbit@hxstrive... The following plugins have been enabled: rabbitmq_federation set 4 plugins. Offline change; changes will take effect at broker restart.
由前面可知,Federation 内部基于 AMQP 协议拉取数据,所以在开启 rabbitmq_federation 插件的时候,默认会开启 amqp_client 插件。
同时,如果要开启 Federation 的管理插件,需要执行 rabbitmq-plugins enable rabbitmq_federation _management 命令,示例如下:
[root@hxstrive ~]# rabbitmq-plugins enable rabbitmq_federation_management Enabling plugins on node rabbit@hxstrive: rabbitmq_federation_management The following plugins have been configured: rabbitmq_federation rabbitmq_federation_management rabbitmq_management rabbitmq_management_agent rabbitmq_web_dispatch Applying plugin configuration to rabbit@hxstrive... The following plugins have been enabled: rabbitmq_federation_management set 5 plugins. Offline change; changes will take effect at broker restart.
开启 rabbitmq_federation_management 插件之后,在 RabbitMQ 管理界面中“Admin”的右侧会多出“Federation Status” 和 “Federation Upstreams”两个 Tab 页,如下图:
rabbitmq_federation_manageme 插件依赖 rabbitmq_management 插件,所以开启 rabbitmq_federation_management 插件的同时默认也会开启 rabbitmq_management 插件。
注意:当需要在集群中使用 Federation 功能的时候,集群中所有的节点都应该开启 Federation 插件.
RabbitMQ 中有关 Feduration 插件的 Federation upstream 信息全部都保存在 RabbitMQ Mnesia 数据库中,包括用户信息、权限信息、队列信息等。在 Federation 中存在 3 种级别的配置。
(1)Upstreams:每个 upstream 用于定义与其他 Broker 建立连接的信息。
(2)Upstream sets:每个 upstream set 用于对一系列使用 Federation 功能的 upstream 行分组。
(3)Policies:每一个 Policy 会选定出一组交换器,或者队列,亦或者两者皆有而进行限定,进而作用于一个单独的 upsteam 或者 upstream set 之上。
实际上,在简单使用场景下,基本上可以忽略 upstream set 的存在,因为存在一种名为 “all” 并且隐式定义的 upstream set,所有的 upstream 都会添加到这个 set 之中。Upstreams 和 Upstream sets 都属于运行时参数,就像交换器和队列一样,每个 vhost 都持有不同的参数和策略的集合。
Federation 相关的运行时参数和策略都可以通过下面 3 种方式进行设置:
(1)通过 rabbitmqctl 工具
(2)通过 RabbitMQ Management 插件提供的 HTTP API 接口
(3)通过 rabbitmq federation management 插件提供的 Web 管理界面的方式。不过基于 Web 管理界面的方式不能提供全部功能,比如无法针对 upstream set 行管理(推荐方式)。
在后续章节中,将分别介绍怎样通过上面三种方式创建 Federation upstream。