欢迎大家关注我公众号“从零开始的it转行生”

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的队列里面收到消息。

posted @ 2020-11-12 15:24  大佬健  阅读(1650)  评论(0编辑  收藏  举报

欢迎大家关注我公众号“从零开始的it转行生”