1

我目前使用来自 spring 集成 aws 的 S3StreamingMessageSource。我将流传递给集成流。

public MessageSource<InputStream> s3InboundStreamingMessageSource() {
    S3StreamingMessageSource messageSource = new S3StreamingMessageSource(template());
    messageSource.setRemoteDirectory(bucketName);
    messageSource.setFilter(new S3PersistentAcceptOnceFileListFilter(new SimpleMetadataStore(),
            "streaming"));
    return messageSource;
}

@Bean
public IntegrationFlow s3IntegrationFlow() {
    return IntegrationFlows.from(s3InboundStreamingMessageSource(), spec -> spec.poller(Pollers.fixedDelay(10, TimeUnit.SECONDS)))
            .transform(new S3ObjectInputStreamToStringTransformer())
            .transform(Transformers.toJson())
            .handle(Http.outboundGateway("http://localhost:8099/create").httpMethod(HttpMethod.POST).extractPayload(true))
            .channel("nullChannel")
            .get();
}

如何从 S3 中删除检索到的远程文件?

在 S3InboundFileSynchronizer 中有一个方法。

像这样:

    @Bean
public S3InboundFileSynchronizer s3InboundFileSynchronizer() {
    S3InboundFileSynchronizer synchronizer = new S3InboundFileSynchronizer(factory);
    synchronizer.setDeleteRemoteFiles(true);
    synchronizer.setPreserveTimestamp(true);
    synchronizer.setRemoteDirectory(bucketName);
    return synchronizer;
}

谁能帮助我或告诉我一个好的解决方法?

4

1 回答 1

1

我们的流式通道适配器没有远程文件的本地副本,因此我们无法猜测您将如何处理远程文件以及如何InputStream处理远程文件。所以,这就是为什么没有setDeleteRemoteFiles().S3StreamingMessageSource

我看到你做这样的事情S3ObjectInputStreamToStringTransformer。请告诉我,这个定制变压器的原因是什么。已经有一个StreamTransformer和它的charset选项InputStream远程文件将被转换为字符串:

/**
 * Construct an instance with the charset to convert the stream to a
 * String; if null a {@code byte[]} will be produced instead.
 * @param charset the charset.
 */
public StreamTransformer(String charset) {

另外:需要记住,StaticMessageHeaderAccessor.getCloseableResource(message)阅读后必须关闭InputStream以避免资源泄漏。

可能.channel("nullChannel")您应该考虑使用 ahandle()来调用AmazonS3.deleteObject(String bucketName, String key)API,而不是您。bucketName分别存储在和FileHeaders.REMOTE_DIRECTORY标题中。keyFileHeaders.REMOTE_FILE

于 2020-07-10T14:02:06.407 回答