Селектор сообщений JMS в объектном сообщении
Я работаю на свободе 18.0.0.2 с JavaEE 8 .
Я создал пользовательское сообщение объекта jms, как это:
public class MyTextMessage extends implements Serializable {
private String text;
private String destination;
private LocalDateTime dateTime;
public MyTextMessage(String text, String destination, LocalDateTime dateTime) {
this.text = text;
this.destination = destination;
this.dateTime = dateTime;
}
public MyTextMessage() {
}
// Getter and Setter
@Override
public String toString() {
return "MyTextMessage{" +
"text='" + text + '\'' +
", destination='" + destination + '\'' +
", dateTime=" + dateTime +
'}';
}
}
Как выбрать в очереди по свойству объекта?
это мой код, но не работает:
JMSConsumer consumer = context.createConsumer(destination, "destination='abcdefg'");
Message message = consumer.receiveNoWait();
if (message != null) {
MyTextMessage myTextMessage = message.getBody(MyTextMessage.class);
System.out.println(myTextMessage);
}
1 ответ
Вы пытаетесь выбрать свойство реализации ObjectMessage, которое технически является частью тела сообщения. Однако в разделе 3.8.1 спецификации JMS 2 говорится:
Селекторы сообщений не могут ссылаться на значения тела сообщения.
Селектор сообщений сопоставляет сообщение, когда селектор оценивается как true, когда поле заголовка сообщения и значения свойств заменяются на соответствующие им идентификаторы в селекторе.
Поэтому вам необходимо установить свойство сообщения со значением, которое вы можете выбрать (например, с помощью javax.jms.Message.setStringProperty ("destination", "abcdefg")).