我的问题是,假设我们有 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-selectors、jms-message和activemq-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 时,您才可以允许消费者选择/接收消息。