是否可以使用JMS队列(HornetQ)向特定接收者发送消息?
在众多接收器中,我希望接收器接收某些消息 正在Linux OS上运行。
每个建议都是适当的。
感谢。
答案 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的队列。现在您的挑战可能是将消息从生产者端路由到适当的队列,如果路由基于消息的某些属性,这应该相当容易吗?