在apachecamel中处理大型压缩文件

2024-05-16

我正在尝试获取一个文件.zip从 ftp 服务器压缩并尝试将其存储在 S3 中.gzip使用骆驼压缩。 以下是我目前的路线。

from("sftp://username@host/file_path/?password=<password>&noop=true&streamDownload=true")
    .routeId("route_id")
    .setExchangePattern(ExchangePattern.InOut)
    .unmarshal().zipFile()
    .marshal().gzip()
    .to("aws-s3://s3_bucket_name?amazonS3Client=#client");

这对于较小的文件来说效果很好。但我的文件压缩后大小约为 700 MB。对于那个大小的文件我得到OutOfMemoryError for Java heap space
我知道骆驼中有一个流媒体选项(.split(body().tokenize("\n")).streaming())但我不确定是否可以在流式传输时解组和编组。 (我看到类似的解决方案here https://stackoverflow.com/questions/8122748/best-strategy-for-processing-large-csv-files-in-apache-camel但在这种情况下,源文件是纯文本/csv)。
问题的第二部分是将文件流式传输回 S3。我知道多部分上传选项中骆驼AWS http://camel.apache.org/aws-s3.html组件,但似乎要求源是一个文件。我不知道如何实现这一目标。

是否可以在不使用自定义处理器中的 java 代码处理(解压缩然后 gzip 压缩)文件的情况下实现此目的?

环境:骆驼2.19.3, Java 8

Thanks


我用它解决了streamCaching()。所以我会这样做的方式是

from('xyz')
.streamCaching()
.unmarshall().gzip()
.to('abc')
.end()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在apachecamel中处理大型压缩文件 的相关文章

随机推荐