【发布时间】:2011-09-07 14:47:24
【问题描述】:
是否可以使用 JMS Queue(HornetQ) 向特定接收者发送消息?
在这么多接收者中,我希望接收者接收到某些消息 在 Linux 操作系统上运行。
每条建议都得到认可。
谢谢。
【问题讨论】:
标签: java jakarta-ee jms hornetq
是否可以使用 JMS Queue(HornetQ) 向特定接收者发送消息?
在这么多接收者中,我希望接收者接收到某些消息 在 Linux 操作系统上运行。
每条建议都得到认可。
谢谢。
【问题讨论】:
标签: java jakarta-ee jms hornetq
您可以使用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/ - 检测接收器的操作系统并使用正确的 TARGET_OS 属性过滤消息
【讨论】:
您可以在消费者端使用 JMS 选择器来查找符合特定条件的消息。
【讨论】:
不确定我是否遗漏了什么,您可以通过拥有多个队列来保持简单 - 特定于每个平台,然后基于 linux 的消费者可以单独收听 linux 特定队列。现在您的挑战可能是将消息从生产者端路由到适当的队列,如果路由基于消息的某些属性,那应该相当容易?
【讨论】: