Код: Выделить всё
jmsTemplate.send(topicName, messageCreator -> {
BytesMessage message = messageCreator.createsBytesMessage();
message.setJMSType("myselector"); // a selector
try{
message.writesBytes(myPrtoobufMessage.toProtobuf()); // its just Bytes as it is protobuf
}catch(IOException ex){
}
return message;
});
})
Код: Выделить всё
@JmsListener(destination = topicName, selector = "JMSType='myselector'")
public void receiveMessageFromTopic(Message m){
// I can get the message I can get the JMSType from it and the body as in Bytes and covert easily
}
Код: Выделить всё
String selector="JMSType='myselector'";
jmsTemplate.setReceiveTimeout(500); // this is necessary or else it will keep on reading or waiting for a message to be read
jmsTemplate.receiveSelected(topicName,selector); // returns null after time out
Destimnation dest = (from destinationResolver.resolveDestinationName(session,topicName,true))
jmsTemplate.receiveSelected( destination, selector); // same null
jmsTemplate.recevieSelectedAndConvert(topicName,selector); // same null
Если я использую метод с аннотацией
@JMSListner с определенным селектором, то я могу читать сообщения из темы.
Я поискал в Google поиск, в чем может быть проблема. пробую разные варианты. Эвн создает MessageListener и добавляет его в jmsTemplate.
Но я не хочу использовать способ @JmsListener. Поскольку он всегда будет запускаться всякий раз, когда я добавляю что-то по теме с тем же селектором. Я хочу читать тему всякий раз, когда захочу, поскольку эта часть jmsTemplate предназначена для проверки содержания целей сообщения темы. Поэтому я хочу запустить его по триггеру, а не по сообщению.
Подробнее здесь: https://stackoverflow.com/questions/783 ... h-selector
Мобильная версия