2014-01-29 54 views
1

如果我發佈一條消息,WSO2的話題,像這樣:通配符如何使用wso2/rabbitMq/c#進行主題消息傳遞?

channel.QueueBind(someQueueName,someExchangeName,"farm.cow.brown"); 

我:

channel.BasicPublish(someExchangeName,"farm.cow.brown",null,someMessage); 

我可以,如果我聽路由鍵「farm.cow.brown」檢索消息認爲我也應該能夠得到的消息,如果我正在聽的變化像這樣:

channel.QueueBind(someQueueName,someExchangeName,"farm.cow.*"); 

兩個listenin中g第一個作品以上的例子,第二個從未做過,不管嘗試的路由組合鍵是什麼(farm.cow。*,farm。*。brown,farm.cow。#,farm。#等)。

我使用rabbitMq和c#連接到wso2。

謝謝。

+0

你是如何聲明你交換的? – Fung

+0

@Fung channel.ExchangeDeclare(exchangeName,ExchangeType.Topic,false,true,null) - 是否與上述問題相關的陳述? – poolboy

+0

示例2中的路由鍵看起來很好,我也對它進行了測試。我懷疑交換類型可能被設置爲直接而不是主題。 – Fung

回答

0

這現在正在爲我工​​作。似乎要使用通配符來偵聽多個主題/路由路徑,每個主題都需要有現有的隊列。

以下是我的意思:考慮主題「farm.cow.brown」和「farm.cow.white」以及一個使用路徑「farm.cow。*」的偵聽器。

如果在「farm.cow.brown」但的「farm.cow.white」現有隊列,我只會被髮布到「farm.cow.brown」的消息,儘管「農場.cow.white「存在並正在發佈消息。

如果「farm.cow.brown」上有一個隊列,「farm.cow.white」上有另一個隊列,「farm.cow。*」會將所有消息發佈到「farm.cow.brown」併發布到「farm.cow.white」。

如果兩個都沒有隊列,「farm.cow。*」不會重發發佈到「farm.cow.brown」和「farm.cow.white」的消息。

(順便說一句,在「farm.cow。*」上面的例子是工作等效使用「農場。#」)

要重申,使用通配符只檢索具有現有隊列或訂閱主題的消息。

這是我的經驗。我已經測試了幾天,似乎是一貫的行爲。

相關問題