分布式应该如何排队在RabbitMQ集群中?

时间:2011-11-16 04:27:36

标签: rabbitmq

假设你有一个3个节点的小rabbitmq系统,它应该在同一个交换中处理100多个体积较大的队列。鉴于队列只存在于创建它们的节点上(我们没有使用复制的高可用性队列),创建队列的最佳方法是什么?在队列节点之间分配队列有什么好处,还是将它们全部保存在一个节点上并让rmq进行路由更好?

2 个答案:

答案 0 :(得分:3)

这取决于你的申请,真的。

RabbitMQ非常聪明地发送消息,所以它只会向集群中的节点发送消息,如果

  1. 保存该消息的队列驻留在该节点或
  2. 如果消费者已连接到该节点并已请求该消息。
  3. 通常,您应该在节点上声明队列,该队列的发布者和使用者都将连接到这些队列。换句话说,您应该将发布者和使用者连接到包含他们使用的队列的节点。这假设您正在尝试节省整体使用的带宽。

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

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

答案 1 :(得分:2)

作为在我正在开发的应用程序中实现冗余和故障转移的一部分,我刚刚在代理后面设置了RabbitMQ集群,并让所有发布者和消费者通过代理连接,当从客户端进入时,robins连接到各个节点。在将RabbitMQ升级到2.7.1之前,这似乎可以非常均匀地将队列分配到单独的节点,但这当然在很大程度上取决于代理如何平衡请求以及客户端何时尝试连接(并声明队列)。 ..

说了这么多,我刚刚升级到RabbitMQ 2.7.1,这非常轻松,给了我们HA队列,这对我们的应用来说是一个相当大的胜利。无论如何,如果你对这个设置感兴趣,并认为它对你的队列问题有好处,我会很乐意分享这个设置。