Java 如何使用JMS队列向特定接收方发送消息

Java 如何使用JMS队列向特定接收方发送消息,java,jakarta-ee,jms,hornetq,Java,Jakarta Ee,Jms,Hornetq,是否可以使用JMS队列(HornetQ)向特定接收方发送消息 在这么多的接收者中,我希望接收者能够接收到特定的消息 正在Linux操作系统上运行 每一个建议都得到了肯定 谢谢。您可以设置JMS消息的属性:并在客户端过滤消息。 例如 message.setStringProperty(“TARGET_OS”,“LINUX”)-位于发送方 -在接收者处检测操作系统并使用正确的TARGET_OS属性过滤消息不确定我是否遗漏了什么,您可以通过拥有多个特定于每个平台的队列来保持简单,然后基于linux的消

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

在这么多的接收者中,我希望接收者能够接收到特定的消息 正在Linux操作系统上运行

每一个建议都得到了肯定


谢谢。

您可以设置JMS消息的属性:并在客户端过滤消息。 例如 message.setStringProperty(“TARGET_OS”,“LINUX”)-位于发送方
-在接收者处检测操作系统并使用正确的TARGET_OS属性过滤消息

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

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

您可以使用设置消息属性,然后让消费者选择他们感兴趣的消息

发件人示例:

Message message = session.createMessage();
message.setObjectProperty("OS", "LINUX");
producer.send(message);
MessageConsumer consumer = session.createConsumer(destination, "OS = 'LINUX'");
//Use consumer to receive messages.
接收机示例:

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选择器:如果您的JMS实现支持它。谢谢您的回复,但实际上我不应该根据需要为此创建新的队列。上述方法如何解决问题?在改变上述内容之后,我面临着这个问题?尽管这实际上并不能解决问题,但它是对JMS消费者创建的一个很好的洞察。谢谢分享!