2010-10-23 137 views
2

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

我的担心是我将每秒处理数千条消息,并且不想让磁盘的速度成为瓶颈。如果事实上确实重定向消息一些如何在内部,我将不得不实行某种类型的分片它很烂:(

让我知道你们:)

回答

3

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

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

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

如果你想保证交付,这是一个不同的问题。

+0

此外,一个问RabbitMQ相关问题的好地方是rabbitmq-discuss邮件列表。在那里张贴实际上保证了一位开发者的回应。我是唯一一个真正阅读SO的人。 :( – scvalex 2010-10-23 22:13:08