如何在使用入站流媒体通道适配器时从 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_DIRECTORY
和FileHeaders.REMOTE_FILE
headers.
这样的信息可以用于 <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.
您好,我如何在使用文件后从 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_DIRECTORY
和FileHeaders.REMOTE_FILE
headers.
这样的信息可以用于 <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.