如果您需要将消息寻址到特定客户端,可以使用消费者端选择器,这是一个往返示例:
服务器发送
QueueSender queueSender = queueSession.createSender(queue);
queueSender.setDeliveryMode(DeliveryMode.PERSISTENT);
TextMessage message = queueSession.createTextMessage("Hello John!");
message.setObjectProperty("ToAddress", "John-123");
queueSender.send(message);
消费者收到
QueueConnection queueConn = connFactory.createQueueConnection();
QueueSession queueSession = queueConn.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
QueueReceiver queueReceiver =
queueSession.createReceiver(queue, "ToAddress = 'John-123'");
queueConn.start();
TextMessage message = (TextMessage) queueReceiver.receive();
queueReceiver
客户端使用选择器创建一个ToAddress=John-123
,因此只有匹配该选择器的消息才会传递给该客户端;其他消息根据他们的选择器发送给不同的消费者。
如果 queuereceiver 'John-123' 没有连接,发送给他的任何消息都会简单地堆积在队列中。如果您想实时接收消息,则需要始终连接接收器。要间歇性地检查消息(有点像每天检查几次电子邮件),创建接收器、检查消息然后断开连接并没有太多开销,但是,避免重复这样做(1000 次或更多) ; 如果是这种情况,请始终保持接收器连接。
希望有帮助,