Spring 如何使用Sring的JmsTemplate通过数据包读取消息

Spring 如何使用Sring的JmsTemplate通过数据包读取消息,spring,spring-jms,jmstemplate,Spring,Spring Jms,Jmstemplate,从包含2M条消息的队列中读取消息时,出现outOfMemoryException。 例如,我正试图找到一种方法,以1000为单位阅读信息。 这是我的密码 List<TextMessage> messages = jmsTemplate.browse(JndiQueues.BACKOUT, (session,browser) -> { Enumeration<?> browserEnumeration = browser.getEnumeration(

从包含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;
    });
List messages=jmsTemplate.browse(JndiQueues.BACKOUT,(会话,浏览器)->{
枚举browserEnumeration=browser.getEnumeration()。;
List messageList=new ArrayList();
while(browserEnumeration.hasMoreElements()){
messageList.add((TextMessage)browserEnumeration.nextElement());
}
返回消息列表;
});

谢谢

在不同的线程上执行浏览,并通过
阻塞队列
将结果子集传递给主线程。e、 g.一个容量较小的
LinkedBlockingQueue

当队列已满时,浏览线程将阻塞。当主线程从队列中删除条目时,浏览器可以添加一个新条目


至少有2个容量可能是有意义的,这样下一个列表就可以立即使用。

你好,Gary,我的问题是,JmsTemplate中是否有一种方法可以获取特定数量(1000)的消息。因为我不知道browse方法是否会在内存中加载导致内存泄漏的消息。或者是因为将消息添加到列表中,加载了两百万条消息并导致outofMemory异常,这与模板无关;模板只是提供给你一个浏览器使用,它不做浏览;这是因为您的代码正在将所有消息读入内存;使用我描述的技巧来避免这种情况。