使用RabbitMQ發送消息時,基本上有交換,隊列和綁定。我瞭解他們的想法以及他們如何相互關聯,但我不確定是誰設置了什麼。RabbitMQ:交換,隊列和綁定 - 誰設置了什麼?
基本上,我在我的應用程序中有三種情況。
情景1:一個出版商,幾個工作進程
我想達到的目標是,將消息發送到隊列中的一個組成部分,而且應是處理在隊列中的項目數工作進程。這對我來說似乎很容易。設置如下:
- 交換:1個隊列
- 裝訂::每當消息隊列被綁定到交換
與類型「直接」
一切都應該是持久的。
那麼誰設置了什麼?在我看來:
- 生產者創造交流
- 生產者創建隊列(因爲目前可能沒有運行工作進程,如果沒有隊列中的消息,否則會被丟失)
- 製作者的結合隊列交換
- 消費者的隊列
權只是聽?
場景2:一個出版商,幾個用戶,揮發性消息
第二種情況是完全不同的。基本上,這是一個pub/sub場景,每條消息都發送給每個當前正在監聽的客戶端。如果客戶端脫機,它不會再收到消息,並且他們也不會存儲在任何地方。這意味着以下設置:
- 交換:與類型「扇出」
- 隊列1個交換:n個隊列,每個消費者
- 裝訂:每個隊列需要綁定到交換
那麼誰設置了什麼?在我看來:
- 生產者創造交流
- 消費者創建隊列(因爲它是它自己的隊列,生產者無法知道誰是感興趣的消息)
- 消費者創建其隊列結合交流
- 消費者監聽到自己的隊列
,對嗎?
方案3:如果一個消費者下線一個出版商,幾個用戶,持久的消息
基本上相同場景2,但該消息應該不會丟失。在我看來,這不應該改變任何東西 - 對嗎?
還有第三個可用於設置的角色:外部管理員。有關更多信息,請參閱此答案的另一個問題:http://stackoverflow.com/questions/6148381/rabbitmq-persistent-message-with-topic-echange/6155733#6155733 –
我沒有明確寫出,但系統應無需外部管理員即可獨立運行。 –