gpt4 book ai didi

Java - 将 JMS 消息流式传输到 Oracle 表中

转载 作者:太空宇宙 更新时间:2023-11-04 11:36:55 24 4
gpt4 key购买 nike

我们使用 Spring Boot 和 JDBC 来捕获 JMS 消息并将其保存到数据库表中。

为了尽可能减少内存占用,我们希望将这些消息流式传输到数据库中并批量提交它们。

是否可以将这些消息流式传输到数据库中?

目前,我们有多个 JMS 监听器从 JMS 队列中进行消费。这些监听器共享一个 LinkedBlockingQueue(它由服务包装),它们将消息写入其中。然后,该队列将被消耗,直到耗尽,结果存储在列表中。这些结果使用 Spring 的 JdbcTemplate 保存。

我们希望减少内存占用,因为这些消息存储在中间列表中只是为了允许批量保存。

在这种情况下有什么建议或经过验证的模式可以遵循吗?

最佳答案

我设法使用方便的 StreamEx 库对流进行分块。然而,我们在流实现时仍然遇到 JVM 内存问题。我们需要运行一些进一步的性能和垃圾收集测试。

流式传输代码如下:

try (StreamEx<MyEntity> stream = StreamEx.of(myEntities)) {
stream.groupRuns((prev, next) -> recordCounter.incrementAndGet() % myApplicationProperties.getBatchSize() != 0)
.forEach((chunk) -> {
if (chunk.size() != 1) {
jmsTemplate.convertAndSend(chunk);
} else {
jmsTemplate.convertAndSend(chunk.get(0));
}
});
}

关于Java - 将 JMS 消息流式传输到 Oracle 表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43186747/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com