7

嗨,我创建了三个在 EC2 上的集群中运行的 RabbitMQ 服务器

我想根据 CPU 利用率扩展 RabbitMQ 集群,但是当我发布消息时,只有一台服务器使用 CPU,而其他 RabbitMQ 服务器不使用 CPU

那么如何在 RabbitMQ 集群中分配负载

4

2 回答 2

9

RabbitMQ 集群旨在提高可扩展性,但系统并不是完全自动化的。

当您在集群中的某个节点上声明队列时,该队列仅在该节点上创建。因此,如果您有一个队列,则无论您发布到哪个节点,消息都会最终到达队列所在的节点。

要正确使用 RabbitMQ 集群,您需要确保执行以下操作:

  • 有多个队列分布在节点上,这样工作分配得有点均匀,
  • 将您的客户端连接到不同的节点(否则,您最终可能会通过一个节点汇集所有消息),并且
  • 如果可以,请尝试让发布者/消费者连接到保存他们正在使用的队列的节点(以最大程度地减少集群内的消息传输)。

或者,看看High Availability Queues。它们就像普通队列,但队列内容在多个节点上镜像。因此,在您的情况下,您将发布到一个节点,RabbitMQ 会将发布镜像到另一个节点,消费者将能够连接到任一节点,而不必担心因内部传输而使集群陷入困境。

于 2012-05-05T13:02:34.253 回答
2

这不是真的。查看有关该主题的文档。

发布到队列的消息被复制到所有镜像。无论消费者连接到哪个节点,消费者都连接到主节点,镜像会丢弃主节点已确认的消息。因此,队列镜像增强了可用性,但不会在节点之间分配负载(所有参与的节点各自完成所有工作)。

于 2018-04-12T10:05:50.363 回答