JMS 将消息发送给消费者子集

问题描述 投票:0回答:1

我的问题是,假设我们有 10 个消费者订阅了该主题。从生产者这边,我只需向 5 个消费者发送一条消息。

假设 5 个消费者拥有唯一的 id [1,2,3,4,5] 我已将其包含在生产者端,字符串连接为“1,2,3,4,5”,我在以下位置指定了这一点:

devices = "1,2,3,4,5"
messagePostProcessor.setStringProperty("deviceIds", devices);

作为选择器在消费者端如何处理。因为我可能会根据情况的需求发送给5个消费者,10个消费者,或者100个消费者中的50个消费者。

从生产者方面,我们获取要发送的消费者 ID。但我们如何才能对消费者进行识别或处理。

jms messaging
1个回答
0
投票

jms-selectorsjms-messageactivemq-message中所述,不能使用数组对象作为jms消息的选择器属性。无论如何,你可以尝试这样的事情。

我想你的设备 ID 会是这样的。 例如:'P8O4O18143JA3068','M0A0H8081436A22N','A0N0G8081436A2DI'等

所以,在从生产者发送消息时,这样做。

String messageBody = "Message body that you want to send."
String messageSelector = "P8O4O18143JA3068, M0A0H8081436A22N, A0N0G8081436A2DI";
TextMessage message = session.createTextMessage(messageBody);
message.setStringProperty("deviceIds", messageSelector);
producer.send(message);

并且,在消费者接收消息时这样做。

String myDeviceId = "P8O4O18143JA3068";
String messageSelector = "deviceIds LIKE '%" + myDeviceId + "%'";
consumer = session.createConsumer(destination, messageSelector);
Message message = consumer.receive()

因此,只有在消息属性中存在关联的 deviceId 时,您才可以允许消费者选择/接收消息。

© www.soinside.com 2019 - 2024. All rights reserved.