分布式RabbitMQ简介

来源:互联网 发布:snmp网管软件 免费 编辑:程序博客网 时间:2024/05/19 13:58
RabbitMQ提供了3种方式实现分布式消息代理:集群(clustering)、联邦(federation)和Shovel。这3种方式可以组合使用。

1、集群
集群方式通过将多台机器连接起来形成一个逻辑消息代理。由于节点间的通信是通过Erlang消息传输实现的,所以集群中的所有节点必须具有相同的Erlang cookie。同一集群中,各台机器之间的网络链路必须是可信赖的,而且所有机器必须运行相同版本的RabbitMQ和Erlang。

在集群中,虚拟主机、交换器、用户信息、权限信息都会自动镜像到集群中的所有节点上,但队列不会。队列可能位于某个节点,或者镜像到若干个节点上。连接到集群中任一节点的客户端都能看到集群中的所有队列,虽然大部分队列实际上都不位于那个节点。

实际中,通常将地理上位于同一地点的机器组成集群来提供高可用性和增加吞吐量。

2、联邦
联邦方式允许某个消息代理的交换器或队列接收发布到另一个消息代理(交换器或队列)的消息,这里的消息代理可以是单台机器或集群。由于消息代理间的通信采用AMQP协议,所以组成联邦的两个交换器或队列必须设置恰当的用户和权限。

组成联邦的交换器是通过单向点对点链路连接起来的。默认情况下,消息只会在联邦链路上转发一次,但为了复杂的路由拓扑,该次数可以增加。一些消息可能不会在联邦链路上转发;如果消息在到达联邦交换器后不会路由到某个队列,那么一开始它就不会被转发。

与联邦交换器相似,组成联邦的队列也是通过单向点对点链路连接起来的。为了跟随消费者,消息会在联邦队列间移动任意次数。

实际中,通常将互联网上的消息代理组成联邦来实现消息的发布/订阅和工作队列。

3、Shovel
采用Shovel方式连接消息代理和采用联邦方式连接消息代理在概念上很相似。只是,Shovel工作在更低层次上。

联邦旨在提供武断的分布式交换器和分布式队列,而Shovel只是简单地从某个消息代理的队列中消费消息,将它们转发到另一个消息代理的交换器。

实际中,当需要更多的控制时(联邦方式满足不了),可以使用shovel来连接互联网上的消息代理。

4、比较
> 集群
[*] 一个集群就是一个逻辑上的消息代理
[*] 所有节点必须运行相同版本的RabbitMQ和Erlang
[*] 节点间必须通过可信赖的LAN连接。由于通过Erlang消息传输实现节点间通信,所以需要相同的Erlang cookie
[*] 节点间的连接都是双向的
[*] 选择了CAP理论中的一致性和分区容错性
[*] 节点要么属于集群要么不属于集群
[*] 连接到任一节点的客户端能够看到所有节点上的队列
> 联邦/Shovel
[*] 各消息代理逻辑上是分离的,并且可能属于不同的拥有者
[*] 各消息代理可以运行不同版本的RabbitMQ和Erlang
[*] 消息代理可以通过不可信赖的WAN连接。由于通过AMQP协议通信,所以需要设置恰当的用户和权限
[*] 可以使用任何拓扑结构将消息代理连接起来。消息代理间的链路可能单向,也可能双向
[*] 选择了CAP理论中的高可用性和分区容错性
[*] 消息代理中的交换器可能有的是联邦的,有的是本地的
[*] 连接到任一消息代理的客户端只能看到该消息代理上的队列
原创粉丝点击