zoukankan      html  css  js  c++  java
  • 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的队列里面收到消息。

  • 相关阅读:
    HDU4529 郑厂长系列故事——N骑士问题 —— 状压DP
    POJ1185 炮兵阵地 —— 状压DP
    BZOJ1415 聪聪和可可 —— 期望 记忆化搜索
    TopCoder SRM420 Div1 RedIsGood —— 期望
    LightOJ
    LightOJ
    后缀数组小结
    URAL
    POJ3581 Sequence —— 后缀数组
    hdu 5269 ZYB loves Xor I
  • 原文地址:https://www.cnblogs.com/yeyongjian/p/13964161.html
Copyright © 2011-2022 走看看