【问题标题】:Processing large compressed files in apache camel在 apache camel 中处理大型压缩文件
【发布时间】:2018-02-14 01:52:55
【问题描述】:

我正在尝试从 ftp 服务器获取具有 .zip 压缩的单个文件,并尝试使用骆驼使用 .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)文件的情况下实现?

环境:骆驼2.19.3,Java 8

谢谢

【问题讨论】:

  • 这个问题解决了吗?我也有类似的问题。

标签: apache-camel


【解决方案1】:

我使用streamCaching() 解决了这个问题。所以我会这样做的方式是

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-24
    • 1970-01-01
    • 1970-01-01
    • 2014-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多