2016-02-17 40 views
5

我們在我的工作場所RabbitMQ周圍有一個包裝庫,由不再在這裏工作的人創建。我正在設計一個使用Rabbit的新系統,並正在制定用於聲明隊列,交換和綁定的最佳方法。我們的Rabbit架構有一些聯邦全局區域,每個區域都有多個Rabbit節點。何時聲明/綁定隊列和交換與RabbitMQ

發佈消息和訂閱隊列的包裝代碼每次重新聲明相關的交換,隊列和綁定。我擔心的是,這可能會在每個消息發佈中引入嚴重的延遲,特別是如果需要等待遠程全局區域中存在隊列/交換的確認。我預計每秒數百萬條消息的基準不會重新宣佈每次發佈的交換。

總之,這種方法對我來說似乎有點浪費和偏執,但也許我錯過了一些東西。

所以,我有幾個問題:

  • 重新申報隊列和交換一個顯著的性能損失,考慮到全球聯盟?
  • 在每次使用中重新聲明一個好方法,因爲它處理由於代理重新啓動或顯式刪除而導致的隊列/交換消失?
  • 我們是否應該在每個進程 中聲明隊列和交換一次並期望它們能夠持續整個生命週期?
  • 是否應該在兔子配置中聲明持久交換和隊列,而不是應用程序聲明?
  • 如果應用程序可能繼續使用舊配置聲明它們,應如何處理隊列/交換的配置更改?應用程序是否應該處理聲明失敗並繼續發佈/使用?

回答

7

重新申報隊列和交換一個顯著的表現打

它可以是一個非常大量消息

重新聲明每個使用好的方法,因爲它處理隊列/交換由於代理重啓或顯式刪除而消失?

「好方法」 - 不。

「有效」防止消失的交流/隊列/綁定關係造成的問題,是的......但它不是做一件好事,在大多數情況下

(也許OK,如果你只發送郵件極少,真正令人擔憂的是拓撲正在被擦乾淨)

我們應該在每個進程中聲明一次隊列並交換一次並期望它們持續整個生命週期嗎?

這是我的一般方法。

它打開拓撲被破壞的可能性,你不知道它。這取決於你是否認爲這真的會發生。

是否應該在兔子配置中聲明持久交換和隊列,而不是應用程序聲明?

預定義的拓撲沒有問題,但是它錯過了rabbitmq和amqp協議的很多功能和靈活性。

許多消息傳遞系統需要預定義拓撲和專用工具來管理拓撲。 amqp的區別在於它允許您根據需要定義拓撲。

如果你處理靜態拓撲結構,那麼這可能是一個不錯的選擇,你

應該如何配置的隊列/交換處理的變化,如果應用程序可以繼續使用舊的配置申報呢?應用程序是否應該處理聲明失敗並繼續發佈/使用?

我會崩潰的應用程序,並報告它通過你使用的任何錯誤報告機制。

具有拓撲結構變化通常是重要的,並完成了一個原因。如果交換或隊列聲明需要更改,可能有很好的理由,代碼不應該繼續使用舊的聲明。

+0

感謝您的全面回答 –

相關問題