我有一个问题,但似乎找不到答案。 这是我第一次在“大”应用程序中使用 RabbitMQ,我想知道队列如何在集群中工作。 据我所知,路由信息(队列、交换、绑定(bind))位于集群中的所有节点上,但队列本身驻留在创建它的计算机上。我正在创建一些持久的持久队列。如果我将持久消息写入集群中 MachineA 上的队列,它们会被写入磁盘,然后我将消息写入 MachineB(同一个队列),它们会被“重定向”到 MachineA 还是会被写入 MachineB 的磁盘?
我担心的是我每秒将处理数千条消息,并且不希望磁盘的速度成为瓶颈。如果它确实在内部以某种方式重定向消息,我将不得不实现某种类型的分片,这很糟糕:(
让我知道伙计们:)
最佳答案
正如您所说,在 RabbitMQ 集群中,队列仅驻留在声明它的节点上。
当您发布到不同节点上的该队列时,消息将路由到正确的计算机,并最终写入磁盘。
这里的关键词是最终。任何消息(无论是在持久队列还是非持久队列上发布的持久消息或 transient 消息)都可能会持久保存到磁盘。发布到持久队列的持久消息只是向代理发出强烈提示,表明该消息应尽快写入磁盘。也就是说,无法保证消息会被写入,因此磁盘通常不会成为瓶颈(异常(exception)情况是内存不足时)。
如果您想要有保证的交付,那就是另一个问题了。
关于queue - 集群中的 RabbitMQ 队列持久化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4005489/