ActiveMQ JMS将消息发送给使用者子集

问题描述

我的问题是,假设有10个消费者订阅了该主题。从生产者方面,我只需要向5个消费者发送消息。

假设5个消费者拥有唯一的ID [1,2,3,4,5] 我已经在生产者端通过字符串串联将其包括为“ 1,5”,我在

devices =“ 1,5” messagePostProcessor.setStringProperty(“ deviceids”,devices);

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

从生产者方面,我们可以获取消费者ID。但是我们如何识别或处理消费者。

解决方法

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()

因此,通过这种方式,只有当message属性中存在与之关联的deviceId时,您才可以允许消费者选择/接收消息。