【问题标题】:RabbitMQ Queue Persistance in a Cluster集群中的 RabbitMQ 队列持久性
【发布时间】:2010-10-23 18:35:30
【问题描述】:

我有一个问题,我似乎找不到答案。 这是我第一次在“大”应用程序中使用 RabbitMQ,我想知道队列在集群中是如何工作的。 我知道路由信息(队列、交换、绑定)位于集群中的所有节点上,但队列本身位于创建它的机器上。我正在创建一些持久的持久队列。如果我将持久消息写入集群中 MachineA 上的队列,它们会被写入磁盘,然后我将消息写入同一队列 MachineB,它们会被“重定向”到 MachineA 还是会被写入 MachineB 的磁盘?

我担心我将每秒处理数千条消息,并且不希望磁盘速度成为瓶颈。如果它确实在内部以某种方式重定向消息,我将不得不实现某种类型的分片,这很糟糕:(

让我知道伙计们:)

【问题讨论】:

    标签: queue rabbitmq cluster-computing


    【解决方案1】:

    如您所说,在 RabbitMQ 集群中,队列仅驻留在声明它的节点上。

    当您发布到不同节点上的该队列时,消息会被路由到正确的机器,并最终被写入磁盘。

    这里的关键词是最终。任何消息(无论是已发布的持久消息还是瞬态消息,在持久或非持久队列上)都可能被持久化到磁盘。发布到持久队列的持久消息只是对代理的强烈暗​​示,即消息应尽快写入磁盘。也就是说,无法保证消息会被写入,因此磁盘通常不会成为瓶颈(如果内存不足则例外)。

    如果您想要保证交付,那是另一个问题。

    【讨论】:

    • 另外,询问 RabbitMQ 相关问题的好地方是 rabbitmq-discuss 邮件列表。在那里发帖实际上保证了其中一位开发人员的回应。我是唯一一个真正阅读SO的人。 :(