如何解决如何使用Sring的JmsTemplate按数据包读取消息
我从具有2 M消息的队列中读取消息时遇到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>>
传递到主线程。例如LinkedBlockingQueue
,容量较小。
当队列已满时,浏览线程将阻塞。当主线程从队列中删除一个条目时,浏览器可以添加一个新条目。
至少要有2个容量,这样才能使下一个列表立即可用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。