我與我的同事在Server A
和Server B
之間討論RabbitMQ
設計,這裏是流程圖如下。是否應該在RabbitMQ中多次聲明交換或隊列?
Server A
通過exchange A
和Queue B
將消息發送到Server B
,並從通過Server B
Queue A
接收消息。反之亦然Server B
。
在Server A
中有兩個類,用C++
實現;一個是sender
,另一個是receiver
。使用JavaScript
實現的Server B
的代碼結構相同。
對於sender
和receiver
在Server A
。我的同事的想法是:
- 在發件人的初始化:
- 創建
rabbitmq
- 連接聲明
exchange A
- 聲明
Queue B
- 綁定的關鍵是
Queue B
- 創建
- 最初化在接收器:
- 創建
rabbitmq
- 連接聲明
exchange B
- 聲明
Queue A
- 結合的關鍵
Queue A
- 創建
同樣的邏輯在Server B
。
不過,我不認爲Queue B
和Exchange B
應該在Server A
聲明。它們應在Server B
中聲明。
最後,我遵循我的同事的想法實施它,因爲他之前做過一些相關的工作。
今天,Server A
在功能amqp_queue_declare
在Sender
模塊測試期間掛起,但重新啓動後RabbitMQ
效果很好。所以我懷疑我的同事想要初始化Sender
。
我的想法:
Server A
- 在發件人
- 創建
rabbitmq
- 連接的初始化聲明
Exchange A
- 創建
- 在接收器中的初始化
- 創建
rabbitmq
- 連接創建
Queue A
- 結合的關鍵
Queue A
- 創建
- 在發件人
Server B
- 在發件人初始化
- 創建
rabbitmq
- 連接聲明
Exchange B
- 創建
- 初始化在接收機
- 創建
rabbitmq
- 連接創建
Queue B
- 結合的關鍵
Queue B
- 創建
- 在發件人初始化
有人能告訴我有什麼不對我的想法?還是有更好的解決方案?
編輯:從@Sigismondo
回答問題做所有需要被交付給消費者A/B的消息?
沒有
沒有消費者A/B需要的情況下,通知的一些消息是失去了什麼?
不,我想知道消費者A如何知道消息丟失了?
在消費者A/B無法到達的情況下,預期行爲是什麼?
如果消費者A不可達,則生產者B不會向A發送任何消息,反之亦然。 B怎麼可能知道消費者A不可及?
目前,在我的系統中,每條消息都有缺陷。所以B在前一種情況下不能從A得到答覆,則B不會將消息發送給A.
如果生產者A/B停機,預期行爲是什麼?
如果生產商B是下跌,那麼A將不會收到來自B.所以任何消息將不會發送任何信息給B.
「目前,在我的系統中,每條消息都有缺陷」。你的意思是RabbitMQ/AMQP標準,不是嗎? – Sigismondo
@Sigismondo不是amqp標準ack,在我自己的系統中定義的ack消息。 – zangw
我明白了。你的問題不能被歸類爲「RPC-over-messaging」,如這裏舉例說明的那樣? https://www.rabbitmq.com/tutorials/tutorial-six-python.html – Sigismondo