如何在RabbitMQ集群中进行负载分配?

jay*_*esh 6 cluster-computing amazon-ec2 rabbitmq amazon-web-services autoscaling

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

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

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

scv*_*lex 8

RabbitMQ集群旨在提高可伸缩性,但系统并非完全自动化.

在集群中的节点上声明队列时,仅在该节点上创建队列.因此,如果您有一个队列,无论您发布哪个节点,该消息都将在队列所在的节点上结束.

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

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

或者,查看高可用性队列.它们与普通队列类似,但队列内容跨多个节点进行镜像.因此,在您的情况下,您将发布到一个节点,RabbitMQ将镜像发布到另一个节点,并且消费者将能够连接到任一节点,而不必担心使用内部传输阻塞群集.