我正在尝试从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
由于
答案 0 :(得分:0)
我用streamCaching()
解决了。所以我要做的就是
from('xyz')
.streamCaching()
.unmarshall().gzip()
.to('abc')
.end()