rabbitMQ集群桥接
rabbitMQ集群桥接
必要环境
rabbitmq 3.8.8
docker 19.03.12
背景说明
公司有新老机房并行问题,最终新机房将会完全替换掉老机房。
目前新老机房都有部署rabbimq集群,新老机房都有应用在调用各自的rabbitmq集群,现在要解决的是,新老机房都会互相调用,所产生的message消费与生产可以互联。
如图:
我们现在使用的方案就是用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
新建桥接stream
注意:在填写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" ".*" ".*" ".*"
修改账号密码: rabbitmqctl change_password test test
在集群1中rabbitmq建立exchange
在集群1中建立queue,并绑定到 test.federation.topic 的exchange上
绑定到test.federation.topic 交换机
绑定成功:
注意事项
federation插件只作同步,针对不同集群同步过去的消息
桥接时输入的地址rmpq协议地址建议填集群地址
如果是单向桥接,只有上游的消息会同步到下游,下游产生的消息不会同步到上游,下游的消费如果发现上游的消息消费来不及时,会主动帮助上游消费消息。
如果是双向桥接,则互为上下游,无论在哪边生产消息或者消费消息,都会影响另一端。