queue - 集群中的 RabbitMQ 队列持久化

标签 queue rabbitmq cluster-computing

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

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

让我知道伙计们:)

最佳答案

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

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

这里的关键词是最终。任何消息(无论是在持久队列还是非持久队列上发布的持久消息或 transient 消息)都可能会持久保存到磁盘。发布到持久队列的持久消息只是向代理发出强烈提示,表明该消息应尽快写入磁盘。也就是说,无法保证消息会被写入,因此磁盘通常不会成为瓶颈(异常(exception)情况是内存不足时)。

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

关于queue - 集群中的 RabbitMQ 队列持久化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4005489/

相关文章:

google-app-engine - 任务队列 API : ETA and Countdown

asp.net-mvc-4 - 使用 RabbitMQ 使用来自 ASP.net MVC 4 的 AMQP 消息

r - 在矩阵中识别 "clusters"或 "groups"

java - Hazelcast 中所有 map 的编程属性设置?

java - 使用java对请求进行排队和批处理

c - 我试图用 C 创建一个队列 ADT,但我的代码出了点问题……有人能修复这个问题吗?

c# - 在数组中的某个位置查找数字,根据某些规则,将复数添加到 "numbers"

MongoDB Schema Design - 实时聊天

java - 尽管设置了心跳,RabbitMQ 连接仍掉线且无法恢复

r - 如何使用 R future 包在集群内进行并行计算?