从包含2M条消息的队列中读取消息时,出现outOfMemoryException。我正试图找到一种方法,以1000为单位阅读邮件。这是我的代码
List<TextMessage> messages = jmsTemplate.browse(JndiQueues.BACKOUT, (session,browser) -> {
Enumeration<?> browserEnumeration = browser.getEnumeration().;
List<TextMessage> messageList = new ArrayList<TextMessage>();
while (browserEnumeration.hasMoreElements()) {
messageList.add((TextMessage) browserEnumeration.nextElement());
}
return messageList;
});
感谢
在不同的线程上执行浏览,并通过BlockingQueue<List<TextMessage>>
将结果子集传递给主线程。例如具有小容量的CCD_ 2。
当队列已满时,浏览线程将被阻塞。当主线程从队列中删除一个条目时,浏览器可以添加一个新条目。
容量至少为2可能是有意义的,这样下一个列表就可以立即使用。