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

  • 相关阅读:
    Camel routes in Spring config file
    Construct a basic automation test framework
    Java custom annotations
    Java Abstract Class
    Hibernate之mappedBy
    hibernate FetchType理解
    hibernate 双向 OneToOne fetchType lazy 问题
    日常总结
    hibernate二级缓存
    sql子查询和嵌套查询
  • 原文地址:https://www.cnblogs.com/yeyongjian/p/13964161.html
Copyright © 2020-2023  润新知