我有一个问题,我似乎无法找到答案。 这是我第一次在“大”应用程序中使用RabbitMQ,并想知道队列中的队列是如何工作的。 我知道路由信息(队列,交换,绑定)在群集中的所有节点上,但它自己的队列驻留在创建它的机器上。我正在创建一些持久的持久队列。如果我将持久性消息写入集群中MachineA上的队列,它们会被写入磁盘,然后我将消息写入MachineB,同一个队列,它们会被“重定向”到MachineA还是会被写入MachineB的磁盘?
我担心的是,我将每秒处理数千封邮件,并且不希望磁盘的速度成为瓶颈。如果它实际上确实重定向了一些内部消息,我将不得不实现某种类型的分片,这很糟糕:(
让我知道伙计们:)
答案 0 :(得分:3)
正如您所说,在RabbitMQ集群中,队列仅驻留在其声明的节点上。
当您在另一个节点上发布到该队列时,该消息将路由到正确的计算机,最终将其写入磁盘。
这里的关键词是最终。任何消息(无论是持久的还是非暂时的,在持久或非持久队列上)都可能会持久保存到磁盘。发布到持久队列的持久性消息只是对代理的一个强烈提示,即消息应该尽快写入磁盘。也就是说,无法保证将写入消息,因此磁盘通常不会成为瓶颈(例外情况是内存不足)。
如果您想要保证交付,这是一个不同的问题。