是否可以使用JMS隊列(HornetQ)將消息發送到特定接收者?如何使用JMS隊列將消息發送到特定接收者
在這麼多接收者中,我希望接收者能夠接收到某個消息,其中 在Linux操作系統上運行。
每個建議appriciated。
謝謝。
是否可以使用JMS隊列(HornetQ)將消息發送到特定接收者?如何使用JMS隊列將消息發送到特定接收者
在這麼多接收者中,我希望接收者能夠接收到某個消息,其中 在Linux操作系統上運行。
每個建議appriciated。
謝謝。
可以使用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'的所有消息將被該消費者忽略。
您可以設置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屬性篩選信息
感謝您的回覆,您可以詳細解釋一下嗎?現在我可以正確發送信息,但是如何收到?或者我需要爲Receiver端設置屬性? – SmartSolution 2011-06-03 09:13:56
您可以在接收方檢查屬性,並在接收方不感興趣時忽略消息。或者您可以使用JMS選擇器:http://download.oracle.com/javaee/1.4/tutorial/doc/JMS4.html如果您的JMS實現支持它。 – dbf 2011-06-03 10:39:56
不知道如果我失去了一些東西,你可以讓事情通過爲每個平臺指定多個隊列簡單,那麼基於Linux的消費者可以單獨收聽linux特定的隊列。現在你的挑戰可能是將消息從生產者端路由到合適的隊列,如果路由是基於消息的某些屬性的話,這應該相當容易?
感謝您的回覆,但實際上我不應按照要求爲此創建新的隊列。 – SmartSolution 2011-06-03 09:15:26
您可以在客戶端使用JMS選擇器來查找符合特定條件的郵件。
上述如何解決問題?我在更改上述內容後面對這個問題? – Kathir 2013-02-14 12:02:48
雖然這實際上並沒有解決問題,但它是對JMS消費者創建的非常好的洞察。感謝分享! – 2014-01-22 09:20:32