【问题标题】:HornetQ Queue BrowserHornetQ 队列浏览器
【发布时间】:2013-10-29 22:48:17
【问题描述】:

我正在尝试使用浏览器查看队列中的消息。 代码如下:

javax.naming.InitialContext ctx = new javax.naming.InitialContext();
javax.jms.QueueConnectionFactory qcf = (javax.jms.QueueConnectionFactory)ctx.lookup('java:/XAConnectionFactory');

javax.jms.QueueConnection connection = qcf.createQueueConnection('admin', 'admin'); // qcf.createQueueConnection();
javax.jms.QueueSession session = connection.createQueueSession(false, javax.jms.Session.AUTO_ACKNOWLEDGE);
connection.start();

// It is a "special" queue and it is not looked up from JNDI but constructed directly
javax.jms.Queue queue = (javax.jms.Queue)ctx.lookup('/queue/myQueue');

javax.jms.QueueBrowser browser = session.createBrowser(queue);

TreeMap<Date, javax.jms.Message> messageMap = new TreeMap<Date, javax.jms.Message>();
int counter = 0;

Enumeration<javax.jms.Message> enumeration = browser.getEnumeration();
while (enumeration.hasMoreElements()) {
  counter++;
  javax.jms.Message message = enumeration.nextElement();
  messageMap.put(new Date(message.getJMSTimestamp()), message);
}

connection.stop();
ctx.close();
session.close();
connection.close();

问题是我总是在枚举中只收到 1 条消息,即使在使用 jmx-console 并调用 listMessagesAsJSON 时我会收到大量消息。

关于我做错了什么有什么想法吗?

【问题讨论】:

    标签: jms hornetq


    【解决方案1】:

    正如 Sergiu 所说,您可能遇到了错误。

    作为一种解决方法,您可以在连接工厂上以不同方式定义使用者窗口大小。也许有一个专门针对这个用例的连接工厂......或者升级 HornetQ 的版本。

    【讨论】:

    • 我已经根据 Justin Bertam 在社区论坛中的回复回答了我自己的问题 :) 谢谢 Clebert。
    【解决方案2】:

    在设置消费者窗口大小时(就像我在我的应用程序中所做的那样),您似乎可以遇到错误 https://issues.jboss.org/browse/HORNETQ-691

    【讨论】:

      猜你喜欢
      • 2014-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-31
      • 2014-06-08
      • 2012-03-13
      • 2012-01-03
      • 1970-01-01
      相关资源
      最近更新 更多