是否可以使用 JMS Queue(HornetQ) 向特定接收者发送消息?
在这么多的接收器中,我希望在 Linux 操作系统上运行的接收器能够接收到某些消息。
每一个建议都是appriciated。
谢谢。
是否可以使用 JMS Queue(HornetQ) 向特定接收者发送消息?
在这么多的接收器中,我希望在 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/ - 在接收方检测操作系统和使用正确的 TARGET_OS 属性过滤消息
您可以在消费者端使用 JMS 选择器来查找符合特定条件的消息。
不确定我是否遗漏了什么,你可以通过拥有多个队列来保持简单——特定于每个平台,然后基于 linux 的消费者可以单独收听 linux 特定队列。现在您的挑战可能是将消息从生产者端路由到适当的队列,如果路由基于消息的某些属性,那应该相当容易?