如何使用JMS队列将消息发送到特定的Receiver

时间:2011-06-03 07:01:17

标签: java java-ee jms hornetq

是否可以使用JMS队列(HornetQ)向特定接收者发送消息?

在众多接收器中,我希望接收器接收某些消息 正在Linux OS上运行。

每个建议都是适当的。

感谢。

4 个答案:

答案 0 :(得分:20)

您可以使用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”的所有消息。

答案 1 :(得分:4)

您可以设置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/ - 在接收器上检测操作系统并使用正确的TARGET_OS属性过滤消息

答案 2 :(得分:1)

您可以在消费者端使用JMS选择器来查找符合特定条件的消息。

答案 3 :(得分:0)

不确定我是否遗漏了某些内容,您可以通过拥有多个队列来保持简单 - 特定于每个平台,然后基于Linux的消费者可以单独监听特定于Linux的队列。现在您的挑战可能是将消息从生产者端路由到适当的队列,如果路由基于消息的某些属性,这应该相当容易吗?