为什么要运行消息队列(例如RabbitMQ)集群?

时间:2018-03-06 18:17:46

标签: rabbitmq queue distributed-system

  

概述

     

RabbitMQ代理是一个或多个Erlang的逻辑分组   节点,每个节点运行RabbitMQ应用程序并共享用户,   虚拟主机,队列,交换,绑定和运行时参数。   有时我们将节点集合称为集群。

你为什么要这样做?我理解增加消息的持久性(如果节点发生故障,其他队列仍然会收到消息)。但性能呢?集群如何提高性能。不管怎么说,所有消费者/生产者都不能连接到主节点的队列?如果是这样,我们仍然无法在单个节点上获得流量吗?我们是否设置了负载均衡器,以便每次都将流量引导到不同的节点?

RabbitMQ集群如何提高性能?

1 个答案:

答案 0 :(得分:0)

那么,在该段落之后,文档说明了以下内容:

  

什么是复制?

     

RabbitMQ代理操作所需的所有数据/状态是   在所有节点上复制。一个例外是消息队列,   默认情况下它们位于一个节点上,尽管它们是可见的   可从所有节点到达。在一个节点中跨节点复制队列   群集,请参阅有关高可用性的文档(请注意您   首先需要一个工作集群。

因此,您将集群在RabbitMQ代理中提供比单个节点单独提供的更高容量。请注意clustering by itself is not a high-availability strategy

您断言消息持久性增加是错误的,因为消息队列继续驻留在一个代理上(除非使用镜像)。

  

默认情况下,RabbitMQ集群中队列的内容位于单个节点(声明队列的节点)上[1]

如果没有镜像,当该节点发生故障时,其上的消息将丢失。群集将队列放在不同的节点上。 RabbitMQ does not handle network partitions well,所以这可能有点问题。

" Aren我们仍然在单个节点上获得流量而不管?" - 如果你只有一个队列,那么是的。但是,一个更大的问题是"为什么你只运行一个只有一个队列的消息代理?"同样,如果您只在一个节点上创建队列,那么系统中仍然会有一个故障点。