首页 文章

Spring集成sftp移动远程文件问题

提问于
浏览
2

我使用Spring Integration中的 inbound-channel-adapter 从远程服务器检索sftp上的文件 . 一切正常 . 但我有一个额外的要求:在本地接收文件后,该文件需要移动到远程服务器上的"send"目录 .

"SFTP Outbound Gateway"有适当的方法用于 move 操作,但我的问题是何时调用它 .

情况:远程服务器上有10个文件,本地服务器上有0个文件当我启动应用程序时,它将从远程服务器接收所有10个文件并将它们写入我的本地文件系统 . 完善 .

情况:远程服务器上有1个文件,本地服务器上有10个文件在这种情况下会收到远程文件,但是对于本地文件系统上的每个文件,也会调用QueueChannel的接收方法 . 来自一个文件的示例日志:(file1.zip)

18:12:52.118 [task-scheduler-1] INFO  o.s.i.file.FileReadingMessageSource - Created message: [[Payload File content=C:\Downloads\sftpTest\file1.zip][Headers=...]
18:12:52.119 [task-scheduler-1] DEBUG o.s.i.e.SourcePollingChannelAdapter - Poll resulted in Message: [Payload File content=C:\Downloads\sftpTest\file1.zip][Headers=...]
18:12:52.119 [task-scheduler-1] DEBUG o.s.integration.channel.QueueChannel - preSend on channel 'fromChannel', message: [Payload File content=C:\Downloads\sftpTest\file1.zip][...]
18:12:52.119 [task-scheduler-1] DEBUG o.s.integration.channel.QueueChannel - postSend (sent=true) on channel 'fromChannel', message: [Payload File content=C:\Downloads\sftpTest\file1.zip][Headers=...]
18:12:52.119 [main] DEBUG o.s.integration.channel.QueueChannel - postReceive on channel 'fromChannel', message: [Payload File content=C:\Downloads\sftpTest\file1.zip][Headers=......]

因此,即使文件没有从远程服务器进行物理检索, channel.receive() 方法仍会收到带有该文件作为有效负载的消息 . 这让我感到困惑,因为我无法从消息中确定该文件是否已在本地文件系统上或刚从远程服务器检索到 . 我尝试使用自定义 org.springframework.messaging.support.ChannelInterceptorAdapterFileFilterServiceActivator ,但问题仍然存在 .

我的应用程序将处理大量数据,因此将接收的文件发送到远程服务器上的所需目录不是一种选择 . 而且只是尝试将文件远程移动到本地接收的每条消息,这不是一个选项,因为它会使日志文件混乱,除非无法移动文件 . 这种方式在出现真正的错误情况时,将无法检测到问题 .

一个解决方案可能是 org.springframework.integration.file.remote.synchronizer.AbstractInboundFileSynchronizer 的方法 copyFileToLocalDirectory 中的钩子 . 如果应删除远程文件并且仅针对实际从远程服务器传输的文件调用该循环,则执行检查 . 我尝试覆盖此方法并添加我的移动行为没有成功,因为Spring已经实例化了将处理此问题的类 .

那么实现这一目标的最佳方法是什么?我知道问题可能位于我的键盘和我的椅子之间,但我已经没有选择了,任何帮助都非常感谢 .

非常感谢,

坦率

1 回答

  • 1

    您可能最好使用MGET和出站网关来检索文件,而不是使用入站适配器,正如您所说,它是两阶段 - 同步,并为本地目录中的文件发出消息(除非你使用持久文件列表过滤器,在这种情况下你只会看到“新”文件) .

相关问题