2010-10-23 106 views
2

我有一個問題,我似乎無法找到答案。 這是我第一次在一個「大」應用程序中使用RabbitMQ,並且想知道隊列如何在羣集中工作。 我知道路由信息(隊列,交換,綁定)在集羣中的所有節點上,但是它自己駐留在創建它的機器上的隊列。我正在創建一些持久的持久隊列。如果我將持久消息寫入羣集中的MachineA上的一個隊列中,它們會寫入磁盤,然後我將消息寫入MachineB,同一隊列,它們將被重定向到MachineA還是將它們寫入MachineB的磁盤?羣集中的RabbitMQ隊列持久性

我的擔心是我將每秒處理數千條消息,並且不想讓磁盤的速度成爲瓶頸。如果事實上確實重定向消息一些如何在內部,我將不得不實行某種類型的分片它很爛:(

讓我知道你們:)

回答

3

正如你所說,一個RabbitMQ的集羣中,隊列僅駐留在聲明的節點上。

當您發佈到不同節點上的該隊列時,郵件將被路由到正確的機器,並最終被寫入磁盤。

這裏的關鍵詞是最終。任何消息(無論持久還是非持久隊列上發佈的持久或瞬態)都可能會持久化到磁盤。發佈到持久隊列的持久消息只是代理的強烈暗​​示,即消息應儘快寫入磁盤。也就是說,不能保證消息將被寫入,所以磁盤通常不會成爲瓶頸(例如,如果內存不足)。

如果你想保證交付,這是一個不同的問題。

+0

此外,一個問RabbitMQ相關問題的好地方是rabbitmq-discuss郵件列表。在那裏張貼實際上保證了一位開發者的迴應。我是唯一一個真正閱讀SO的人。 :( – scvalex 2010-10-23 22:13:08