將使用Java API的例子在我的答案。
消費者是否有可能訂閱一組發佈商?
RMQ消費者並不知道出版商。它們之間的實體是隊列(和生產者(出版商)方面的交換)。 Java API com.rabbitmq.client.Channel.basicConsume(String, Consumer)
只允許從一個隊列消耗。但是,您可以將相同的Consumer
回調傳遞給多個隊列
另一種方法是創建每個消費者隊列,並使用channel.queueBind
將其綁定到生成有趣消息的交換。或者更容易,讓他們發佈到一些通用交換並綁定到那個。
是否可以訂閱一組主題?例如,如果我們有幾個以「數據」開頭的主題,比如data_1,data_2等,是否有可能讓消費者訂閱「data *」?我沒有找到任何關於這方面的信息,但是從我所瞭解的交流工作方式看來,這似乎不太可能。
不是顯式的,因爲您需要傳入隊列名稱。 但是你可以解決與交換路由: 如果您目前的狀態是:
producer1 -> exchange-data-1 -> queue-data-1
producer2 -> exchange-data-2 -> queue-data-2
producer3 -> exchange-data-3 -> queue-data-3
你也可以建立一個新的交換
producer1 -> exchange-data-1 --\
producer2 -> exchange-data-2 -> exchange-data-all -> queue-per-consumer -> your-consumer
producer3 -> exchange-data-3 --/
是否可以有子課題,甚至分亞文化?根據我目前瞭解的情況,使用主題或標題交換,子主題和子主題基本上都是路由關鍵字的一部分,例如data.diag.signal。
有一個在RMQ無子課題的概念,但是,正如你所提到,您可以使用topic
(甚至headers
,更豐富的設計)交流。
謝謝你的回答,這是非常有幫助的!關於話題交換的通配符,我知道可以訂閱諸如A.B. *或A。*。*之類的話題,但是可以訂閱諸如A。*。C之類的話嗎? –