Jms HornetQ队列浏览器

Jms HornetQ队列浏览器,jms,hornetq,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 = q

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

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();
javax.naming.InitialContext ctx=newjavax.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();
//它是一个“特殊”队列,它不是从JNDI中查找的,而是直接构造的
javax.jms.Queue Queue=(javax.jms.Queue)ctx.lookup('/Queue/myQueue');
javax.jms.QueueBrowser browser=session.createBrowser(队列);
TreeMap messageMap=newtreemap();
int计数器=0;
枚举=browser.getEnumeration();
while(枚举.hasMoreElements()){
计数器++;
javax.jms.Message Message=enumeration.nextElement();
messageMap.put(新日期(message.getjmstiestamp()),message);
}
连接。停止();
ctx.close();
session.close();
connection.close();
问题是,我在枚举中总是只得到一条消息,即使在使用jmx控制台查看并调用listMessagesAsJSON时,我得到了大量消息


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

当设置消费者窗口大小时(就像我在应用程序中所做的那样),你似乎可以找到bug。

正如Sergiu所说,可能是你遇到了bug


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

根据Justin Bertam在社区论坛上的回复,我已经回答了自己的问题:)谢谢Clebert。