我知道在主題交換中實現循環法行爲可能會非常棘手或根本無法實現,所以我的問題實際上是,如果我能從RabbitMQ中做出任何事情或者望向其他消息隊列支持。如何在RabbitMQ中實現循環法主題交換
這裏是我的應用需求進行詳細的解釋:
- 將有一個製片人,我們稱之爲
P
- 有(可能)將是成千上萬的消費者,我們姑且稱之爲
Cn
- 每消費者可以「訂閱」1個或多個話題交換並且多個消費者可以訂閱同一主題
- 發佈到該話題中的每個消息應該僅被一個消費者消費
使用案例#1
假設:
主題
foo.bar
foo.baz
消費者
- 消費者
C1
訂閱主題#
- 消費者
C2
訂閱主題foo.*
- 消費者
C3
訂閱主題*.bar
生產者P
公佈下列信息:
- 發佈
foo.qux
:C1
和C2
可以潛在地消耗該消息,但只有一個接收它 - 發佈
foo.bar
:C1
,C2
和C3
可以潛在地消耗該消息,但只有一個接收它
注意 不幸的是,我不能爲每個「主題」有一個單獨的隊列,因此使用Direct Exchange
不工作k因爲主題組合的數量可能很大(數以萬計)
從我讀過的內容來看,RabbitMQ沒有開箱即用的解決方案。有人知道解決方法,或者有另一個消息隊列解決方案可以支持這一點,例如。卡夫卡,Kinesis等
謝謝
雖然我理解了這個問題,並發現它的反常性非常有趣(這可以說是100%足夠的問題),但我也很好奇這個用例。在我看來,話題交換旨在發佈關於「主題」的消息,並讓「人們」對某種類型的接收消息感興趣。沒有看到任何方式可以有效地從主題交換中「產生/消耗」,但我一定是錯的。就我個人而言,除了推遲使用某些數據存儲選舉獲勝的消費者之外,我沒有看到任何其他方式。我可能是錯的,我對卡夫卡和Kinesis瞭解不多。 – user1527491
我的觀點是:如果所有(或某些)消費者都被告知已發送消息,則使用話題交換。如果只有一個消費者必須以生產者/消費者的方式消費該消息,則使用直接或扇出交換。如果您需要兩者,請同時使用!發佈到兩個交易所。但這並不能解決問題,事實上,因爲你的消費者會有錯誤的消費者。 – user1527491
順便說一下,雖然我不是卡夫卡的專家,但我99%確信它不會幫助(甚至會更糟糕),因爲它根本沒有路由的概念。這是pub/sub更糟或更好的,這意味着它甚至不會幫助生產者/消費者的東西。請注意,即使RabbitMQ也不保證一次交付。 – user1527491