【问题标题】:ActiveMQ message selectorActiveMQ 消息选择器
【发布时间】:2015-03-02 16:43:45
【问题描述】:

在我的消息队列中包含多条消息。我想按特定属性分组。这些都有一个自定义属性“item-id”

这个我现在将某些价值归结为:运动、电影……

我喜欢这样做:

new MessageCreator() {
 ObjectMessage message = session.createObjectMessage();
 message.setObject(data);
 message.setStringProperty("item-id", "sports");
}

此值也显示在属性的队列中。

当我尝试检索包含此属性的消息时,我没有得到任何结果。

一审:

 Connection con = pc.createConnection();
 Session sess =con.createSession(false,Session.AUTO_ACKNOWLEDGE);       
 AmqMessagesQueryFilter queryFilter = new AmqMessagesQueryFilter(pc, queue); 
 con.start();
 String selector = "item-id = 'sports'";
 List messages = queryFilter.query(selector); 

但是列表是空的

二审:

 Connection con = pc.createConnection();
 Session sess = con.createSession(false, Session.AUTO_ACKNOWLEDGE);

 AmqMessagesQueryFilter queryFilter = new AmqMessagesQueryFilter(pc, queue);

 QueueBrowser queueBrowser = sess.createBrowser(queue,"item-id = 'sports'");
 con.start();
 List messages=Collections.list(queueBrowser.getEnumeration());

列表也是空的。

我的错误是什么?

【问题讨论】:

  • 在运行查询过滤器之前,您是否将一些消息放入队列中?
  • 是和不是。我在开始前尝试了队列中的一些消息,并在开始时尝试了一个空队列。
  • 断开所有监听器,将一些具有标题“item-id”和值为“sports”的消息放入队列中,然后再次运行您的过滤器。

标签: jms activemq


【解决方案1】:

我知道这为时已晚,但这可能会为某人节省大量时间浪费(和挫败感)。

不要在消息选择器中使用破折号。如果需要,请使用下划线。 在此处查找“标识符”:https://docs.oracle.com/javaee/1.4/api/javax/jms/Message.html

【讨论】:

    猜你喜欢
    • 2015-06-16
    • 2019-08-04
    • 2012-04-25
    • 1970-01-01
    • 2017-09-13
    • 1970-01-01
    • 2014-01-22
    • 1970-01-01
    • 2012-09-08
    相关资源
    最近更新 更多