一、为什么要使用联邦交互机federation

有些时候,我们的rabbitmq为了容灾,会部署到不同的城市。
例如北京部署一台rabbitmq,广州部署一台rabbitmq。

其中广州rabbitmq有exchangeA。

当北京的应用要发消息到exchangeA的时候,会因为网络原因,导致发送时间延时。
rabbitmq federation 联邦交换机

federation提供了一个能力,让北京的rabbitmq接受exchanegA的消息。然后再把exchangeA的消息转发到广州的exchangeA。

rabbitmq federation 联邦交换机

二、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之间

rabbitmq federation 联邦交换机

三、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拦
rabbitmq federation 联邦交换机

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">>}, []}).'
rabbitmq federation 联邦交换机

4、新增一个rabbitmq_federation

在机器3执行命令
rabbitmqctl set_parameter federation-upstream f1 '{"uri":"amqp://guest:guest@192.168.2.138:5672","ack-mode":"on-confirm"}'
rabbitmq federation 联邦交换机
这里的192.168.2.138改成机器1的ip
或者在管理台用页面新建
rabbitmq federation 联邦交换机

5、新增一个policy

这里是匹配以eujian.开头的交换机
在机器3执行命令
rabbitmqctl set_policy --apply-to exchanges p1 "eujian.*" '{"federation-upstream":"f1"}'
或者通过管理台新建
rabbitmq federation 联邦交换机
[图片上传中...(image.png-258e5f-1604834983968-0)]

6、效果验证

这里点击federation status
rabbitmq federation 联邦交换机

进入机器1的rabbitmq管理台
rabbitmq federation 联邦交换机

rabbitmq federation 联邦交换机

这里对机器1的exchange发送一条消息
rabbitmq federation 联邦交换机

然后在机器2的队列里面收到消息。
rabbitmq federation 联邦交换机

相关文章:

  • 2021-10-01
  • 2022-03-05
  • 2021-08-08
  • 2021-12-13
  • 2022-12-23
  • 2021-10-29
  • 2022-01-08
  • 2021-11-08
猜你喜欢
  • 2021-10-29
  • 2021-12-24
  • 2021-12-01
  • 2021-06-08
  • 2021-07-13
  • 2021-05-04
  • 2021-06-22
相关资源
相似解决方案