SET化消息中间件架构实现
RabbitmQ双活架构图
注意:
如果镜像队列过多,同步时会慢,影响性能
如果设置镜像队列的某几台服务器同步,路由规则会多,维护复杂难
使用set化拆分集群,通过路由规则负责将消息路由到某个集群
使用RabbitMQ异步消息通信插件 Federation的安装与配置
rabbitmq-plugins enable rabbitmq_federation
rabbitmq-plugins enable rabbitmq_federation_management
备注:当你在一个cluster中使用federation插件,所有集群的nodes都需要安装federation插件
先单点同步,比如黄node3和绿node1进行同步,由于是镜像机制,绿的集群会通过node1同步整个集群
RabbitMQ通信插件Federation特点
Federation插件是一个在不需要cluster,而brokers之间传输的高性能插件
Federation插件可以在brokers或者cluser之间传输消息,链接的双方可以使用不用的users和virtual hosts、或者双方的rabbitmq和erlang版本不一致,Federation插件使用不同AMQP协议通信,可以接受不连续的传输
环境搭建
启动Federation插件
//两个节点都要启动
rabbitmq-plugins enable rabbitmq_federation
rabbitmq-plugins enable rabbitmq_federation_management
如在Admin中能看到下图,表示成功
策略
20做Upstream
21做Downstream
将消息发送到20节点上,消息通过Federation流转到21节点上
下游配置-exchange和queue
下游配置-Upstream
URI:填上游的地址
下游配置-配置策略
^test:以test开头的交换机或队列都可以匹配
上游变化
这两个连接一个是exchange,一个是queue
test.exchange是自动构建的
test.queue是自动构建的
消息测试
将消息发送到上游中
上游
下游
上游和下游消费同一条消息
需要在上游建新的队列和绑定路由
将消息发送到上游中
上游
下游
SET化配置规则
- Federation Exchanges,可以看出Downstream(21节点)从Upstream(20节点)主动拉取消息,但并不是拉取所有消息,必须是在Downstream上已经明确定义Bindings关系的Exchange,也就是有实际的物理Queue来接收消息,才会从Upstream拉取消息到Downstream。使用AMQP协议实施代理间通信,Downstream会将绑定关系组合在一起
- 经过配置后,Upstream节点已经把消息直接通过Federation Exchanges路由给我们的Downstream节点,然后进行消费,也就是说,可以实现路由转发,接下来可以在Upstream添加具体的队列去进行消费Federation Exchanges里的消息,我们一条消息分别发到2个RabbitMQ集群并消费,这样我们可以实现SET化的关键要素,就是集群间的消息同步了
- 可以根据自己的业务规则去规划不同的集群去监听不同的消息队列,从而达到SET化的手段,保障了性能、可靠性、数据一致性