2016-04-21 91 views
0

我想建立一個RabbitMQ系統,爲了提高性能可以擴展。RabbitMQ集羣還包括可擴展性嗎?

我已經瀏覽了RabbitMQ Clustering的官方文檔。但是,其集羣似乎不支持可伸縮性。這是因爲只有通過主隊列,我們​​才能發佈/使用,即使主隊列可從羣集的任何節點訪問。除了主隊列所在的節點之外,我們無法處理任何發佈/消耗。

爲什麼我們集羣呢?

+0

我來拆分使用負載均衡器 看這個問題: http://stackoverflow.com/questions/36650061/how-to-make-rabbitmq-scalable/36747717#36747717 –

回答

0

爲什麼我們集羣呢?

  • 確保可用性。
  • 執行數據複製。
  • 傳播負載/數據跨不同節點上的隊列。主隊列可以存儲在不同的節點上,並以<個數的集羣節點進行復制。

除了在其上主隊列駐留的節點,我們無法處理任何 發佈/消耗。

客戶端可以連接到羣集的任何節點上。這個節點將'請求'傳送到主隊列節點,反之亦然。作爲缺點,它會產生額外的跳躍。

+0

爲了提高吞吐量,可以將數據的原件它們是邏輯上應該駐留在單個隊列中,並分佈在多個節點上?那是你在說什麼?順便說一句,謝謝你的答案。 – choiapril

+0

您可以使用[聯合隊列](https://www.rabbitmq.com/federated-queues.html)實現某種負載平衡。您也可以在客戶端實現負載平衡:生產者將消息發佈到具有根據負載平衡因素旋轉的路由密鑰後綴的交換機(例如,key.0,key.1,key.0 .... for two隊列)。在服務器端,您使用綁定鍵「key.0」和「key.1」將這兩個隊列綁定到此交換機。這些隊列由兩個專用節點管理。消費者從這兩個隊列中消耗.... –

+0

因此,即使處理請求的節點是鏡像的並且是從屬節點,該請求將被引導至主隊列,對嗎? – choiapril

0

對標題Is RabbitMQ Clustering including scalability too?中的問題的回答 - 是的,這是通過簡單地添加更多節點/將某些節點從集羣中刪除來實現的。當然,你必須要考慮高可用性 - 這是隊列和交換鏡像
而只是爲了讓事情就清楚:

然而,它的集羣似乎不支持的可擴展性。這是 ,因爲只有通過主隊列我們纔可以發佈/使用,即使 可以從羣集的任何節點訪問主隊列。

發佈完成交換,隊列與發佈無關。發佈客戶端僅發佈到交換和路由密鑰。它不需要關於隊列的任何知識。