对象消息上的 JMS 消息选择器
JMS message selector on Object message
我正在使用 JavaEE 8 开发 liberty 18.0.0.2。
我创建了这样的自定义 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 +
'}';
}
}
如何 select 按对象 属性 加入队列?
这是我的代码,但不起作用:
JMSConsumer consumer = context.createConsumer(destination, "destination='abcdefg'");
Message message = consumer.receiveNoWait();
if (message != null) {
MyTextMessage myTextMessage = message.getBody(MyTextMessage.class);
System.out.println(myTextMessage);
}
您正在尝试 select ObjectMessage 实现的 属性,这在技术上是消息正文的一部分。但是,JMS 2 规范的第 3.8.1 节指出:
Message selectors cannot reference message body values.
A message selector matches a message when the selector evaluates to true
when the message’s header field and property values are substituted for their
corresponding identifiers in the selector.
因此,您需要在消息上设置一个 属性,其值可以 select(例如,使用 javax.jms.Message.setStringProperty("destination", "abcdefg"))。
我正在使用 JavaEE 8 开发 liberty 18.0.0.2。
我创建了这样的自定义 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 +
'}';
}
}
如何 select 按对象 属性 加入队列?
这是我的代码,但不起作用:
JMSConsumer consumer = context.createConsumer(destination, "destination='abcdefg'");
Message message = consumer.receiveNoWait();
if (message != null) {
MyTextMessage myTextMessage = message.getBody(MyTextMessage.class);
System.out.println(myTextMessage);
}
您正在尝试 select ObjectMessage 实现的 属性,这在技术上是消息正文的一部分。但是,JMS 2 规范的第 3.8.1 节指出:
Message selectors cannot reference message body values.
A message selector matches a message when the selector evaluates to true when the message’s header field and property values are substituted for their corresponding identifiers in the selector.
因此,您需要在消息上设置一个 属性,其值可以 select(例如,使用 javax.jms.Message.setStringProperty("destination", "abcdefg"))。