JMS消息选择器在对象消息上

4

我正在使用JavaEE 8和Liberty 18.0.0.2进行工作。
我创建了一个自定义的JMS对象消息,如下所示:

public class MyTextMessage 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个回答

4
您正在尝试选择 ObjectMessage 实现的属性,这些属性在技术上是消息正文的一部分。然而,JMS 2 规范的第 3.8.1 节规定:
消息选择器不能引用消息正文值。 当选择器对于使用消息的标头字段和属性值替换其相应标识符时计算为 true 时,消息选择器匹配消息。
因此,您需要在消息上设置一个属性,以便您可以选择该属性的值(例如,使用 javax.jms.Message.setStringProperty("destination", "abcdefg"))。

如何为此对象添加标题? - mah454
我在我的回答中提供了一个示例以及相关方法的JavaDoc链接。请澄清需要哪些额外细节。 - Justin Bertram

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接