簡體   English   中英

Rabbit Mq,在發布者之前啟動消費者

[英]Rabbit Mq, Starting consumer before publisher

我為發布者和消費者創建了兩個單獨的應用程序,它們從公共隊列發送和接收消息。 我首先啟動了消費者應用程序,但尚未聲明交換(它已聲明並綁定到發布者上的隊列),這就是我收到錯誤的原因。

所以我的問題是,

  1. 將交換聲明並綁定到消費者隊列是個好主意嗎?
  2. 在消費者中聲明交換的情況下,消費者是否應該知道交換屬性和交換類型。 在我的例子中,消費者只知道從特定隊列接收消息的交換、隊列、路由。

首先,重要的是要注意,即使隊列未綁定到任何交換,啟動消費者並從現有隊列消費也不應該給您任何錯誤。 隊列不必綁定到交換,它可以獨立存在。

回答您的問題:這取決於您的用例。 消費者創建隊列,創建交換然后將隊列綁定到交換可能是可以的。 這允許消費者控制將哪些消息路由到隊列並可由他使用。 如果消費者是應該執行此控制的一方,這很好。 但是,如果用例表明除消費者之外的另一方應控制路由,則該另一方應創建交換和綁定。

考慮一個拓撲,其中只有簡單的交換綁定到隊列。 在這樣的拓撲中,只有從交換機到隊列的綁定,而沒有從交換機到交換機的綁定。 這種拓撲可以由消費者創建。

但是考慮具有兩級交換的不同拓撲。 較低級別的交換綁定到隊列,這類似於第一個拓撲。 但是在這個較低級別之上有更高級別的交換,這些交換只綁定到較低級別的交換。 更高級別的交換根據與具體消費者無關的規則分發消息。 事實上,這兩個級別的交換可以在沒有任何隊列和消費者的情況下存在。 消費者無法在此拓撲中創建交換和綁定。

消費者可以通過為自己聲明一個隊列,將這個隊列綁定到他感興趣的較低級別的交換,並從隊列中消費,從而成為第二個拓撲的一部分。 消費者不會創建任何交換,他只是將他的隊列綁定到它們。

所以總結一下:在瑣碎的場景中,誰聲明交換、隊列和綁定並不重要,只要一切都按照正確的順序進行。 但是在更復雜的場景中,責任應該在 RabbitMQ 管理員、生產者和消費者之間分散。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM