文章目录
  1. 1. rabbitMQ集群桥接
    1. 1.1. 必要环境
    2. 1.2. 背景说明
    3. 1.3. 使用插件
    4. 1.4. Federation演示
    5. 1.5. 插件安装
    6. 1.6. 必要工具安装
    7. 1.7. 配置federation
      1. 1.7.1. 新建policy
    8. 1.8. 新建桥接stream
    9. 1.9. 建立可远程访问的用户
    10. 1.10. 在集群1中rabbitmq建立exchange
    11. 1.11. 在集群1中建立queue,并绑定到 test.federation.topic 的exchange上
      1. 1.11.1. 绑定到test.federation.topic 交换机
    12. 1.12. 注意事项

rabbitMQ集群桥接

必要环境

rabbitmq 3.8.8

docker 19.03.12

背景说明

公司有新老机房并行问题,最终新机房将会完全替换掉老机房。

目前新老机房都有部署rabbimq集群,新老机房都有应用在调用各自的rabbitmq集群,现在要解决的是,新老机房都会互相调用,所产生的message消费与生产可以互联。

如图:

img

我们现在使用的方案就是用feduration插件

使用插件

实现集群与集群间的数据同步;节点与节点之间的通信;

Federation插件是一个在不需要cluster,而broker之间传输消息的高性能插件。

Federation插件可以在broker或者cluster之间传输消息,链接的双方可以使用不同的users和virtual hosts、或者双方的rabbitmq和erlang版本不一致。Federation插件使用的是AMQP协议通信,可以接受不连续的传输。

Federation演示

准备两个RabbitMQ, 我使用的是docker安装,hostname分别是 rabbitmq1、rabbitmq2。

docker-compose.yml:

version: '3'
services:
  rabbitmq1:
    image: hgq/rabbitmq_federation:v1.0
    container_name: rabbitmq1
    restart: always
    hostname: myRabbitmq1
    ports:
      - 15672:15672
      - 5672:5672
    volumes:
      - ./data1:/var/lib/rabbitmq
    environment:
      - RABBITMQ_DEFAULT_USER=root
      - RABBITMQ_DEFAULT_PASS=root123456
  rabbitmq2:
    image: hgq/rabbitmq_federation:v1.0
    container_name: rabbitmq2
    restart: always
    hostname: myRabbitmq2
    ports:
      - 15673:15672
      - 5673:5672
    volumes:
      - ./data2:/var/lib/rabbitmq
    environment:
      - RABBITMQ_DEFAULT_USER=root
      - RABBITMQ_DEFAULT_PASS=root123456

这里面的镜像是我自己打好的,安装了插件和必要工具包的镜像。

插件安装

rabbitmq-plugins enable rabbitmq_federation

rabbitmq-plugins enable rabbitmq_federation_management

必要工具安装

登陆到容器中,执行命令:

apt-get install net-tools

apt-get install vim

apt-get install inetutils-ping

配置federation

新建policy

image-20200911133937733

image-20200911134043885

新建桥接stream

image-20200911134140482

注意:在填写uri时,如果默认的guest账号未开启远程服务,则建议重新新建一个账号,新建账号默认是开启了远程访问

建立可远程访问的用户

命令行:

rabbitmqctl add_user test test
rabbitmqctl set_user_tags test administrator
rabbitmqctl set_permissions -p / test ".*" ".*" ".*"
rabbitmqctl set_permissions -p "custom-vhost" "username" ".*" ".*" ".*"

image-20200909151455601

修改账号密码: rabbitmqctl change_password test test

在集群1中rabbitmq建立exchange

image-20200909144842075

在集群1中建立queue,并绑定到 test.federation.topic 的exchange上

image-20200909145006088

绑定到test.federation.topic 交换机

image-20200909145148133

绑定成功:

image-20200909145224200

注意事项

  1. federation插件只作同步,针对不同集群同步过去的消息

  2. 桥接时输入的地址rmpq协议地址建议填集群地址

  3. 如果是单向桥接,只有上游的消息会同步到下游,下游产生的消息不会同步到上游,下游的消费如果发现上游的消息消费来不及时,会主动帮助上游消费消息。

  4. 如果是双向桥接,则互为上下游,无论在哪边生产消息或者消费消息,都会影响另一端。

参考:https://www.rabbitmq.com/access-control.html

文章目录
  1. 1. rabbitMQ集群桥接
    1. 1.1. 必要环境
    2. 1.2. 背景说明
    3. 1.3. 使用插件
    4. 1.4. Federation演示
    5. 1.5. 插件安装
    6. 1.6. 必要工具安装
    7. 1.7. 配置federation
      1. 1.7.1. 新建policy
    8. 1.8. 新建桥接stream
    9. 1.9. 建立可远程访问的用户
    10. 1.10. 在集群1中rabbitmq建立exchange
    11. 1.11. 在集群1中建立queue,并绑定到 test.federation.topic 的exchange上
      1. 1.11.1. 绑定到test.federation.topic 交换机
    12. 1.12. 注意事项