在Java EE应用程序中,我使用JMS存储一些消息。我想在JSF分页表中显示这些消息。如何从队列中批量获取消息?目前,我正在使用类似的方法,但这并不是很好,因为我需要遍历许多消息。
这可以实现吗?我正在将JBoss与HornetQ一起使用。
browser = session.createBrowser(queue);
List<Message> messagesToReturn = new ArrayList<>();
final Enumeration<ObjectMessage> messages = browser.getEnumeration();
int messagesSoFar = 0;
int count = 0;
while(messages.hasMoreElements()) {
ObjectMessage message = messages.nextElement();
if (count >= offset) {
messagesToReturn.add(new CGSQueueMessage(message));
messagesSoFar += 1;
}
if (messagesSoFar == maxSelect) {
break;
}
count += 1;
}
return messagesToReturn;
答案 0 :(得分:0)
JMS API中没有方法可以针对您这样的分页用例从队列中批量获取消息。
您可以将队列浏览器中的所有消息读入您自己的数据结构中,并使用它进行分页。
如果有太多消息无法一次将它们全部放入内存中的数据结构中,那么您可以读取尽可能多的消息,以使其可以合理地装入内存中(这可能比用户在任何存储器上看到的消息都要多)给定的页面),并将其用作您自己的一种应用程序级页面,您可以将其用于提供用户级页面。这样可以减少您遍历队列浏览器的次数。
除此之外,您还可以将队列浏览器中的所有消息都转储到临时的随机访问文件中,并从中提取结果。
所有这些,我认为您的用例最终不适合JMS这样的消息传递API。在我看来,我认为您更适合使用可以轻松支持此用例的数据库之类的东西。