使用Sftp从目录下载所有文件的最佳实践是什么

使用Sftp从目录下载所有文件的最佳实践是什么,sftp,spring-integration,Sftp,Spring Integration,我想实现以下功能: 将所有文件从指定的远程目录下载到本地目录 下载所有文件后,我需要一个包含所有下载文件的列表文件。 (我只希望在成功下载所有文件时使用此列表文件。) 第1点: 假设远程目录中有大约10个文件。 我可以使用int-sftp:inbound channel adapter组件下载所有文件,但下载所有文件需要10个轮询周期,因为每个轮询请求入站组件只能下载1个文件。 Spring集成一个接一个地创建10个文件消息 问题: 如何识别从FTP服务器接收的最后一个文件(消息) 我不想让用户

我想实现以下功能:

  • 将所有文件从指定的远程目录下载到本地目录

  • 下载所有文件后,我需要一个包含所有下载文件的列表文件。 (我只希望在成功下载所有文件时使用此列表文件。)

  • 第1点: 假设远程目录中有大约10个文件。 我可以使用
    int-sftp:inbound channel adapter
    组件下载所有文件,但下载所有文件需要10个轮询周期,因为每个轮询请求入站组件只能下载1个文件。 Spring集成一个接一个地创建10个文件消息

    问题:

  • 如何识别从FTP服务器接收的最后一个文件(消息)

  • 我不想让用户访问列表文件,直到所有文件从FTP成功接收。 我怎样才能做到这一点? 我可以使用int file:outbound通道适配器将文件名写入列表文件,但用户可以在下载过程完成之前从该文件中读取临时信息

  • 如何触发FTP上的所有文件都已下载的事件

  • 谢谢你的建议


    首先,这是不正确的:

    入站组件每次轮询请求只能下载1个文件

    您可以将其配置为在单个轮询期间无限下载-
    max messages per poll=-1
    。无论如何,它是
    上的默认选项

    无论如何,如果您的情况是每次轮询加载一个文件,您可以继续执行该要求

    由于任何消息传递系统都试图实现无状态模式,因此一条消息对另一条消息一无所知是正常的。这样它们就不会相互影响了。
    async
    场景最适合于消息传递。这样我们可以比第一条更快地处理第二条消息

    你的要求很有趣,我不敢说这很奇怪。因为任何事情都有可能发生

    由于要将多个下载文件作为一个组进行处理,因此需要在远程服务器上设置一些
    标记。或者它可以是一些
    时间框架
    ,我们可以从文件
    时间戳
    中提取。或者需要在远程服务器上存储一些标记文件,以指示一组文件已完成,您可以使用本地版本从应用程序处理它们。如果标记文件可以包含该组的文件名列表,那就太好了

    否则,我们就没有任何钩子指向这些文件的
    消息


    另一方面,您可以考虑使用<代码> <代码>使用<代码> MGE< /COD>命令:

    当前实施的解决方案通过使用INTSFTP:在远程FTP服务器上执行LS命令:出站网关能够处理一个组中的FTP文件。然后我将列表拆分并逐个下载,在进程结束时,文件将从FTP中删除。但这种解决方案有一个缺点。出站网关组件不支持轮询。所以我不得不使用外部调度来使用这个对我来说有点难看的解决方案。事实上,这没关系。您可以使用伪
    实现
    出站网关
    轮询
    场景,并将空字符串消息发送到该SFTP网关的
    请求通道
    。非常感谢。这是一个避免外部调度的好方法。