rabbitmq - 队列在 RabbitMQ 集群中应该如何分布?

标签 rabbitmq

假设您有一个由 3 个节点组成的小型 rabbitmq 系统,该系统应该在同一交换中处理 100 多个相当大的队列。鉴于队列仅存在于创建它们的节点上(我们不使用复制的高可用性队列),创建队列的最佳方法是什么?将队列分布在集群节点之间有什么好处,还是将它们全部保留在一个节点上并让 rmq 进行路由更好?

最佳答案

这真的取决于您的应用。

RabbitMQ 在发送消息方面很聪明,所以它只会向集群中的节点发送消息,如果

  1. 保存该消息的队列驻留在该节点上或
  2. 如果消费者已连接到该节点并已请求消息。

一般来说,您的目标应该是在该队列的发布者和消费者都将连接到的节点上声明队列。换句话说,您的目标应该是将发布者和消费者连接到保存他们使用的队列的节点。这假设您正在努力节省总体带宽使用量。

如果您正在使用集群来提高吞吐量(您可能确实如此),并且您不关心使用的内部带宽,您应该旨在以平衡的方式将您的发布者/消费者连接到节点而不用担心内部路由机制。

最后要考虑的一件事是内存和磁盘空间。队列将消息存储在主内存中,如果不足则回退到磁盘。因此,如果您在一个地方声明所有队列,这将导致一个节点“过度工作”和两个有空闲内存的节点。

关于rabbitmq - 队列在 RabbitMQ 集群中应该如何分布?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8146732/

相关文章:

rabbitmq-server 无法启动 - 无法连接到 epmd/Ubuntu 16.04

erlang - 有没有办法打印配置参数?

rabbitmq - 当 RabbitMQ 交换不存在时如何处理错误(消息通过消息网关接口(interface)发送)

java - 如何实现 java 生产级 RabbitMQ 消费者

c# - 为什么要在 RabbitMQ 中声明 Exchange?

go - 如何返回 channel

rabbitmq - 跨队列的消息排序

java - 内部服务之间的速率限制

queue - 删除 RabbitMQ 中的队列

c# - Masstransit - Rabbit MQ 虚拟主机