如何使用部署在 pcf 中的 spring 集成应用程序优化处理存储在 S3 存储桶中的大量文件?

How to optimally process large number of files stored in S3 bucket using spring integration app deployed in pcf?

我们有使用经典 spring mvc(4.x) 和 spring 集成框架开发并部署在 weblogic 中的应用程序(我们没有其他选项),它会轮询文件nfs 挂载并处理它们。

现在我们被要求离开 weblogic 并使用 PCF 作为平台。我们现在遇到的问题是 PCF 没有配置为使用卷服务,所以我们必须像存储一样从 S3 轮询文件并处理它。

由于 pcf 应用程序有最大 2gb 磁盘 space 和 2gb 内存(组织限制)限制,在不下载或必须下载的情况下处理存储在 S3 中的这些文件的最佳方法是什么?我们可以优化一下吗

注意:作为处理这些压缩文件的一部分,我们必须提取一些文件并将其重新上传回 S3,而一些我们必须拒绝。

为避免在本地复制,请考虑使用流式入站通道适配器:https://github.com/spring-projects/spring-integration-aws/#streaming-inbound-channel-adapter

@Bean
@InboundChannelAdapter(value = "s3Channel", poller = @Poller(fixedDelay = "100"))
public MessageSource<InputStream> s3InboundStreamingMessageSource() {    
    S3StreamingMessageSource messageSource = new S3StreamingMessageSource(template());
    messageSource.setRemoteDirectory(S3_BUCKET);
    messageSource.setFilter(new S3PersistentAcceptOnceFileListFilter(new SimpleMetadataStore(),
                               "streaming"));       
    return messageSource;
}

在主要 Spring 集成文档中查看有关流媒体通道适配器逻辑的更多信息:https://docs.spring.io/spring-integration/reference/html/ftp.html#ftp-streaming