RabbitMQ通过插件(例如:STOMP)支持AMQP和其它协议,这些协议本身就支持分布式。有三种方式可以可以让RabbitMQ broker实现分布式,分别是Clustering、Federation和The Shovel,下面会介绍每种方式的作用。需要注意的是你不必只选择其中一种方式,而是可以根据需要选择其中一种或者几种方式的组合来达到自己分布式的目的。


一、Clustering

    集群可以通过单逻辑broker的方式来连接多个机器。各机器间通过Erlang消息传递来通信,因此,集群内所有节点都必须有相同的Erlang cookie。集群内机器间的网络连接必须是可信的,且所有机器必须运行相同版本的Erlang和RabbitMQ。

    虚拟机、交换机、用户和权限会自动镜像到集群内所有节点。队列可能位于单节点上,或者镜像到多个节点上。客户端连接到集群内任何节点都能看到集群内所有队列。

    你可以通过集群来实现高可用和增加吞吐量。


二、Federation

    Federation允许一个broker上的交换机接收发布到另一个broker(这个broker可能是单独的机器或者集群)上的交换机的消息。为了节点间能够通过AMQP(带上SSL选项)通信,组成federation的两个交换机之间必须授予适当的用户和权限。

    组成federation的交换机之间通过单向点对点连接。缺省情况下,在federation连接上,消息仅仅被转发一次,但是这样可增加更多、更复杂的路由拓扑。

    federation连接上,有些消息可能不会被转发;如果一条消息到达federated交换机后不能被路由到某个队列,则它不会被转发。

    你可以在Internet上通过federation连接各个broker来pub/sub消息。


三、The Shovel

    通过The Shovel来连接各个broker类似于Federation。然而,The Shovel工作在更低一层。

    鉴于federation从一个交换机镜像消息到另一个交换机(如果必要可以确认消息是否被转发),The Shovel简单从一个broker的一个队列中消费消息,且转发该消息到另一个broker的交换机。

    如果你想获得比federation更多的控制,你可以在Internet上使用The Shovel连接各个broker来发布消息。


    通过以上分析,你会发现这三种方式之间有着一定的区别与联系,具体请看下表:



    打完收工了,请期待下期的集群吧。。。调下口味。。。RabbitMQ源码解析前奏--分布式-LMLPHP


09-03 06:12