跳至主内容
版本:4.2

分布式 RabbitMQ

概述

RabbitMQ 支持的 AMQP 0-9-1、AMQP 1.0 以及通过插件支持的其他消息传递协议(例如 STOMP),当然本身就是分布式的:应用程序几乎总是连接到远程主机上的 RabbitMQ。

通常有必要或希望使 RabbitMQ 代理本身也分布化。实现这一目标有三种方法:通过集群 (Clustering)、通过联邦 (Federation) 和使用 Shovel 插件。本文档概述了每种方法。

请注意,这三种方法并非互斥,可以结合使用:集群可以与联邦或 Shovel(或两者)连接。本文档提供了每种方法的概述。

集群

集群 将多台机器连接在一起以形成一个集群。节点间的通信对客户端透明。集群的设计假定网络连接相当可靠,并且提供局域网般的延迟。

集群中的所有节点必须运行兼容版本的 RabbitMQ 和 Erlang

节点使用 预共享密钥 相互认证,该密钥通常由部署自动化工具安装。

虚拟主机、交换机、用户和权限会自动复制到集群中的所有节点。队列可以位于单个节点上,或者复制其内容以提高可用性。Quorum queues 是一种现代的复制队列类型,专注于数据安全。Streams 是另一种复制消息数据类型,允许可重复消费(读取)。

连接到集群中任何节点的客户端可以使用集群中的所有非独占队列,即使它们不在该节点上。

集群节点有助于提高可用性、队列内容的数据安全性和支持更多并发客户端连接。 集群Quorum QueuesStreams 指南提供了有关这些主题的更多详细信息。

联邦

联邦 允许一个代理上的交换机或队列接收发布到另一个代理上的交换机或队列的消息(代理可以是单个机器或集群)。通信通过 AMQP(可选 SSL),因此要使两个交换机或队列进行联邦,它们必须被授予适当的用户和权限。

联邦交换机通过单向点对点链接连接。默认情况下,消息只会转发一次,但这可以增加以允许更复杂的路由拓扑。有些消息可能不会通过链接转发;如果消息在到达联邦交换机后无法路由到队列,则根本不会转发。

联邦队列也通过单向点对点链接连接。消息将在联邦队列之间转发任意次数以跟随消费者。

通常,您会使用联邦来通过互联网链接代理,用于发布/订阅消息传递和工作队列。

Shovels

使用Shovel 插件连接代理在概念上与使用联邦连接代理相似。但是,该插件在较低级别上工作。

而联邦旨在提供交换机和队列的有策略的分发,Shovel 仅从一个代理上的队列消费消息,并将它们转发到另一个代理上的交换机。

通常,当您需要比联邦提供的更多控制时,您会使用 Shovel 通过互联网链接代理。

动态 Shovel 也可用于在单个代理上以临时方式移动消息。

总结

联邦和/或 Shovel集群

代理在逻辑上是独立的,并且可能具有不同的所有者。

集群形成一个单一的逻辑代理。

代理可以运行不同(且在某些方面不兼容)版本的 RabbitMQ 和 Erlang。

节点必须运行兼容版本的 RabbitMQ 和 Erlang。

代理可以通过不可靠的 WAN 链接连接。通信通过 AMQP 0-9-1(可选通过 TLS 安全),需要设置适当的用户和权限。

代理必须通过相当可靠的 LAN 链接连接。节点将使用共享密钥相互认证,并可选择使用 TLS 启用的链接

代理可以按照您安排的任何拓扑连接。链接可以是单向或双向的。

所有节点在两个方向上都连接到所有其他节点。

强调 CAP 理论中的可用性和分区容错性 (AP)。

强调 CAP 理论中的一致性和分区容错性 (CP)。

代理中的某些交换机可能是联邦的,而有些可能是本地的。

集群是全有或全无的。

连接到任何代理的客户端只能使用该代理中的非独占队列。

连接到任何节点的客户端可以使用所有节点上的非独占队列。

© . This site is unofficial and not affiliated with VMware.