HornetQ队列浏览器

时间:2013-10-29 13:56:50

标签: jms hornetq

我试图使用浏览器查看队列中的消息。 代码就像:

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();

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

关于我做错什么的任何想法?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

正如Sergiu所说,你可能会遇到一个错误。

您可以通过不同方式在连接工厂上定义consumer-window-size。也许只有这个用例的连接工厂......或者可能升级HornetQ的版本。