问题描述
我的问题是,假设有10个消费者订阅了该主题。从生产者方面,我只需要向5个消费者发送消息。
假设5个消费者拥有唯一的ID [1,2,3,4,5] 我已经在生产者端通过字符串串联将其包括为“ 1,5”,我在
devices =“ 1,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()
因此,通过这种方式,只有当message属性中存在与之关联的deviceId时,您才可以允许消费者选择/接收消息。