2011-06-03 169 views

回答

16

可以使用Message.setObjectProperty(String, Object)設置消息屬性,然後讓消費者選擇的消息,他們有興趣使用Session.createConsumer(Destination, String)

發件人例如:

Message message = session.createMessage(); 
message.setObjectProperty("OS", "LINUX"); 
producer.send(message); 

接收機例如:

MessageConsumer consumer = session.createConsumer(destination, "OS = 'LINUX'"); 
//Use consumer to receive messages. 

在這個例子中,接收者會忽略(他們會去其他接收者)與選擇器不匹配的所有消息。在這種情況下,'OS'屬性不是'LINUX'的所有消息將被該消費者忽略。

+0

上述如何解決問題?我在更改上述內容後面對這個問題? – Kathir 2013-02-14 12:02:48

+1

雖然這實際上並沒有解決問題,但它是對JMS消費者創建的非常好的洞察。感謝分享! – 2014-01-22 09:20:32

3

您可以設置JMS消息的屬性:http://download.oracle.com/javaee/1.4/api/javax/jms/TextMessage.html並在客戶端過濾消息。 例如, message.setStringProperty(「TARGET_OS」,「LINUX」) - 在發送端 http://www.mkyong.com/java/how-to-detect-os-in-java-systemgetpropertyosname/ - 檢測OS在接收器與正確TARGET_OS屬性篩選信息

+0

感謝您的回覆,您可以詳細解釋一下嗎?現在我可以正確發送信息,但是如何收到?或者我需要爲Receiver端設置屬性? – SmartSolution 2011-06-03 09:13:56

+0

您可以在接收方檢查屬性,並在接收方不感興趣時​​忽略消息。或者您可以使用JMS選擇器:http://download.oracle.com/javaee/1.4/tutorial/doc/JMS4.html如果您的JMS實現支持它。 – dbf 2011-06-03 10:39:56

0

不知道如果我失去了一些東西,你可以讓事情通過爲每個平臺指定多個隊列簡單,那麼基於Linux的消費者可以單獨收聽linux特定的隊列。現在你的挑戰可能是將消息從生產者端路由到合適的隊列,如果路由是基於消息的某些屬性的話,這應該相當容易?

+0

感謝您的回覆,但實際上我不應按照要求爲此創建新的隊列。 – SmartSolution 2011-06-03 09:15:26

1

您可以在客戶端使用JMS選擇器來查找符合特定條件的郵件。

相關問題