如何在使用入站流媒体通道适配器时从 SFTP 中删除文件

How to delete File from SFTP while using inbound-streaming-channel-adapter

您好,我如何在使用文件后从 SFTP 中删除源文件。下面是我的配置。它正确地使用文件并处理它。但在下一次民意调查中,它的读数又是一样的。我喜欢删除源文件或避免读取相同的文件 again.i 我正在使用 4.3.13

 <int-sftp:inbound-streaming-channel-adapter id="sftpAdapter"
                                  session-factory="sftpSessionFactory"
                                  filename-pattern="*.xml"
                                  channel="receiveChannel"
                                  remote-directory="/tmp/charge/">
</int-sftp:inbound-streaming-channel-adapter>

<int:poller fixed-rate="30000" max-messages-per-poll="1" id="ChargePoller"/>

<int:channel id="receiveChannel">
    <int:queue/>
</int:channel>

<int:stream-transformer id="withCharset" charset="UTF-8"    input-channel="receiveChannel" output-channel="fileInString"  />

<int:service-activator id="ChargeFeedListener" input-channel="fileInString"  method="onMessage" >
    <bean class="listener.ChargeFeedListener">
        <constructor-arg name="ChargeService" ref="ChargeService"/>
    </bean>
</int:service-activator>

<int-sftp:inbound-streaming-channel-adapter> 将此信息存储到它生成的远程文件流消息的 headers 中:

 return getMessageBuilderFactory()
                    .withPayload(session.readRaw(remotePath))
                    .setHeader(IntegrationMessageHeaderAccessor.CLOSEABLE_RESOURCE, session)
                    .setHeader(FileHeaders.REMOTE_DIRECTORY, file.getRemoteDirectory())
                    .setHeader(FileHeaders.REMOTE_FILE, file.getFilename())
                    .setHeader(FileHeaders.REMOTE_HOST_PORT, session.getHostPort())
                    .setHeader(FileHeaders.REMOTE_FILE_INFO,
                            this.fileInfoJson ? file.toJson() : file);

注意FileHeaders.REMOTE_DIRECTORYFileHeaders.REMOTE_FILEheaders.

这样的信息可以用于 <int-sftp:outbound-gateway>command="rm" 作为 remote-filename-generator-expression="headers[file_remoteDirectory]+'/'+headers[file_remoteFile]"

此网关可用作 fileInString 消息通道的第二个订阅者,您应该将其设置为 <publish-subscribe-channel>https://docs.spring.io/spring-integration/docs/current/reference/html/core.html#channel-implementations-publishsubscribechannel.

另见文档:https://docs.spring.io/spring-integration/docs/current/reference/html/sftp.html#sftp-streaming-java-config