假設您有一個包含3個節點的小型rabbitmq系統,應該可以在同一個交換中處理100個以上的高容量隊列。鑑於隊列只存在於創建它們的節點上(我們沒有使用複製的高可用性隊列),創建隊列的最佳方式是什麼?將隊列分佈在羣集節點中有什麼好處,還是將它們全部保留在一個節點上並讓rmq執行路由更好?應該如何分佈在RabbitMQ集羣中的隊列?
回答
這取決於你的應用程序,真的。
RabbitMQ的是聰明發送消息,所以當集羣中
- 保存該消息駐留在節點或
- 上,如果消費者有一個隊列,系統只會將消息發送到節點連接到該節點並請求該消息。
通常,您應該旨在在該隊列的發佈者和使用者將連接到的節點上聲明隊列。換句話說,您應該旨在將發佈者和使用者連接到擁有所使用隊列的節點。這假定您正在嘗試節省整體使用的帶寬。
如果您使用集羣來提高吞吐量(您可能是),並且您不關心內部使用的帶寬,您應該旨在以平衡的方式將發佈者/消費者連接到節點,而不用擔心關於內部路由機制。
要考慮的最後一件事是內存和磁盤空間。隊列將消息存儲在主內存中,如果不足,則將其退回到磁盤。因此,如果您將所有隊列聲明在一個地方,則會導致一個「過度工作」的節點和兩個內存空閒的節點。
感謝您的意見,scvalex。我喜歡在發佈者和訂閱者都將連接到的節點上創建隊列的想法。然而,我們實現起來有點困難,因爲我們有一個可變的隊列隊列,並且不得不通過發佈者和訂閱者都知道的某種可散列算法將隊列分配給一個節點。 –
很好的答案。您能否引用一些關於權衡*吞吐量和內部帶寬的資源*以及過度使用一個節點*? – sumid
作爲在我正在開發的應用程序中實現冗餘和故障轉移的一部分,我剛剛完成了在代理之後設置RabbitMQ集羣,並讓我的所有發佈者和消費者通過代理進行連接來自客戶端的各個節點之間的連接。在將RabbitMQ升級到2.7.1之前,這似乎將隊列非常均勻地分配給單獨的節點,但這當然很大程度上取決於代理如何平衡請求以及客戶端何時嘗試連接(並聲明隊列)。儘管如此,我剛剛升級到RabbitMQ 2.7.1,這非常痛苦,給了我們高可用性隊列,這對我們的應用來說是一個非常大的勝利。無論如何,如果您對設置感興趣,並認爲這對您的隊列問題會有好處,我很樂意分享這個設置。 「
- 1. RabbitMQ in Action:羣集中的隊列
- 2. 羣集中的RabbitMQ隊列持久性
- 3. RabbitMQ集羣鏡像隊列行爲
- 4. JMS集羣x分佈式隊列
- 5. 隊列類型爲「集羣」的集羣中的別名隊列
- 6. 跨羣集的分佈式隊列中的所有JMSs消息
- 7. Rabbitmq隊列分片
- 8. RabbitMQ:如何設置羣集?
- 9. RabbitMq集羣
- 10. rabbitmq HA羣集
- 11. RabbitMQ跨羣集隊列的策略同步
- 12. 的RabbitMQ openshift集羣
- 13. RabbitMQ的HA羣集
- 14. 如何在RabbitMQ集羣中進行負載分配?
- 15. 如何在PHP中的celery-rabbitmq隊列上發佈任務?
- 16. 如何將rabbitmq用作分佈式任務隊列?
- 17. 如何在Masstransit/RabbitMQ中組織隊列?
- 18. 是否應該在RabbitMQ中多次聲明交換或隊列?
- 19. 在ActiveMq集羣中刪除隊列?
- 20. 在羣集隊列中放置消息
- 21. rabbitMQ集羣設置
- 22. Logstash with rabbitmq集羣
- 23. 我可以在RabbitMQ集羣中禁用遠程隊列訪問嗎?
- 24. RabbitMQ的不一致集羣
- 25. 高可用性的RabbitMQ集羣隊列鏡像:在時間t獲取主節點的ip隊列
- 26. 如何使用rabbitmq docker的spring-boot創建rabbitmq中的隊列
- 27. 如何在集羣中使隊列管理器默認爲
- 28. RabbitMQ - parellel隊列
- 29. 在RabbitMQ集羣中停止MessageListenerContainer
- 30. 在rabbitmq中創建羣集時出錯
」由於隊列只存在於創建它們的節點上,「 –
- 在HA羣集中,它們被複制到每個節點,不是? (對不起,上面一半提交的評論然後分散注意力!) –
嘿史蒂夫,對不起,我不清楚。我們目前沒有使用高可用性隊列,因爲直到後來的rmq版本才推出它們。將更新問題更具體。 –