在apache camel中处理大型压缩文件

时间:2018-02-14 01:52:55

标签: apache-camel

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

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,但在这种情况下,源文件是纯文本/ csv)。
问题的第二部分是将文件流回S3。我知道 camel-aws 组件中的 multiPartUpload 选项,但似乎要求源是文件。我不知道如何实现这一点。

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

环境:Camel 2.19.3 ,Java 8

由于

1 个答案:

答案 0 :(得分:0)

我用streamCaching()解决了。所以我要做的就是

from('xyz')
.streamCaching()
.unmarshall().gzip()
.to('abc')
.end()