从 s3 存储桶中删除源文件:s3-inbound-streaming-channel-adapter
Delete source file from s3 bucket : s3-inbound-streaming-channel-adapter
源文件在成功传输到目标目录后不会从 s3 存储桶中删除一次。
步骤 1. 使用入站流通道适配器将源文件从 S3 流式传输到本地目录。(工作正常)
第 2 步:想要在成功传输后删除源文件(不工作)
配置代码如下
<int-aws:s3-inbound-streaming-channel-adapter id="s3FilesInbound"
channel="s3FilesChannel"
session-factory="s3SessionFactory"
filename-regex="^.*\.(txt|csv)$"
remote-directory-expression="bucket_name"
auto-startup="true" >
<integration:poller id="s3FilesChannelPoller"
fixed-delay="1000"
max-messages-per-poll="1">
</integration:poller>
</int-aws:s3-inbound-streaming-channel-adapter>
<integration:stream-transformer id="streamTransformer" input-channel="s3FilesChannel" output-channel="s3FilesChannelOut"/>
<integration:chain id="filesS3ChannelChain"
input-channel="s3FilesChannelOut">
<file:outbound-gateway
id="fileInS3ArchiveChannel"
directory="local_directory"
filename-generator-expression="headers.file_remoteFile">
<file:request-handler-advice-chain>
<ref bean="retryAdvice" />
</file:request-handler-advice-chain>
</file:outbound-gateway>
<integration:gateway request-channel="nullChannel"
error-channel="errorChannel" />
</integration:chain>
此致,
既然你在那里使用 <integration:stream-transformer>
,我看不出有什么理由依赖 <int-aws:s3-inbound-streaming-channel-adapter>
。对于第一个,您只需消除最后一个的流式传输目的。
我建议您查看常规 <int-aws:s3-inbound-channel-adapter>
,它已经有一个 delete-remote-files="true"
选项。
另一方面,你仍然可以用你目前拥有的东西来做到这一点,但你需要像 <integration:outbound-channel-adapter expression="@s3SessionFactory.getSession().remove(headers[file_remoteDirectory] + '/' + headers[file_remoteFile])">
.
这样的东西
那些 headers 由 AbstractRemoteFileStreamingMessageSource
填充。
源文件在成功传输到目标目录后不会从 s3 存储桶中删除一次。 步骤 1. 使用入站流通道适配器将源文件从 S3 流式传输到本地目录。(工作正常) 第 2 步:想要在成功传输后删除源文件(不工作) 配置代码如下
<int-aws:s3-inbound-streaming-channel-adapter id="s3FilesInbound"
channel="s3FilesChannel"
session-factory="s3SessionFactory"
filename-regex="^.*\.(txt|csv)$"
remote-directory-expression="bucket_name"
auto-startup="true" >
<integration:poller id="s3FilesChannelPoller"
fixed-delay="1000"
max-messages-per-poll="1">
</integration:poller>
</int-aws:s3-inbound-streaming-channel-adapter>
<integration:stream-transformer id="streamTransformer" input-channel="s3FilesChannel" output-channel="s3FilesChannelOut"/>
<integration:chain id="filesS3ChannelChain"
input-channel="s3FilesChannelOut">
<file:outbound-gateway
id="fileInS3ArchiveChannel"
directory="local_directory"
filename-generator-expression="headers.file_remoteFile">
<file:request-handler-advice-chain>
<ref bean="retryAdvice" />
</file:request-handler-advice-chain>
</file:outbound-gateway>
<integration:gateway request-channel="nullChannel"
error-channel="errorChannel" />
</integration:chain>
此致,
既然你在那里使用 <integration:stream-transformer>
,我看不出有什么理由依赖 <int-aws:s3-inbound-streaming-channel-adapter>
。对于第一个,您只需消除最后一个的流式传输目的。
我建议您查看常规 <int-aws:s3-inbound-channel-adapter>
,它已经有一个 delete-remote-files="true"
选项。
另一方面,你仍然可以用你目前拥有的东西来做到这一点,但你需要像 <integration:outbound-channel-adapter expression="@s3SessionFactory.getSession().remove(headers[file_remoteDirectory] + '/' + headers[file_remoteFile])">
.
那些 headers 由 AbstractRemoteFileStreamingMessageSource
填充。