2013-07-18 47 views
6

在我的應用程序中,我有一個可能變得非常大的隊列。 如果我發現機器上沒有更多空間會怎麼樣? 如何在多臺機器上拆分我的隊列? 也許RabbitMQ的哲學是不同的,我應該創建多個隊列而不是一個大隊列。RabbitMQ隊列設計和縮放

最佳, 弗拉維奧

回答

1

RabbimMQ提供clusteringhigh availability features開箱的,你就必須將它們配置您的需求。

實際上,AMQP可以容納任何大小的消息,但是在大多數情況下,我猜,99%的消息只有32Kb。您可以計算估計的資源使用情況(最小/最大/平均值),並進一步做出決定是否集羣。

+2

從我的理解隊列不能在不同的機器之間進行分裂,單個隊列的單個節點(所以單個隊列無法形成規模僅居這麼多)..我錯了嗎? – user2539645

+0

沒錯,排隊在單個節點上(但可以鏡像到另一個節點上)。什麼是你的信息估計大小和流量? – pinepain

+0

實際上是在接下來的日子裏會被評估的東西..我預計TB的數據會在幾個小時內到達,所以我應該期待一個非常沉重的系統..也許更好的解決方案可能是創建一個新的交換,而不是隊列,並隨着負載增長添加更多的隊列(對羣集要求)。您認爲如何? 問題是:交換是否在節點上均勻創建新的隊列(如循環賽)? – user2539645

1

正如你可以閱讀RabbitMQ郵件列表線程http://rabbitmq.1065348.n5.nabble.com/RabbitMQ-scalability-design-question-td28323.html,我想到的解決方案是實現競爭消費者模式(隊列上的許多消費者),當檢測到特殊消息(停止標誌打開)發送STOP給主題交換的消息。

該「停止」消息由「主」消費者接收,該消息開始輪詢Zookeeper(通過策展人),直到Ceratain zkNode的所有孩子都被刪除(在此情況下使用Zookpeer作爲隊列消費者的註冊表)。當所有消費者完成其停止階段時,「主」消費者執行一些任務並重新啓用原始隊列消費者向主題交換(其中每個消費者使用專用隊列正在偵聽)發送RESTART消息。

我希望這能幫助(或「激勵」)別人..