使用Sftp从目录下载所有文件的最佳做法是什么?

时间:2014-11-29 19:35:38

标签: sftp spring-integration

我想实现以下功能:

  1. 将指定远程目录中的所有文件下载到本地目录。

  2. 下载所有文件后,我需要一个包含所有下载文件的列表文件。 (当成功下载所有文件时,我只想要这个列表文件。)

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

    问题:

    1. 如何识别从FTP服务器收到的最后一个文件(消息)?

    2. 我不希望让用户访问列表文件,直到成功收到FTP中的所有文件。 我怎么能得到这个? 我可以使用int-file:outbound-channel-adapter将文件名写入列表文件,但是用户可以在下载过程完成之前从该文件中读取temorary信息。

    3. 如何触发下载FTP上所有文件的事件?

    4. 感谢您的建议

      Ferenc的

1 个答案:

答案 0 :(得分:0)

首先,这是不正确的:

  

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

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

无论如何,如果你的情况是每个民意调查下载一个文件,你可以继续这个要求。

由于任何Messaging系统都试图实现stateless范例,因此一条消息对另一条消息一无所知是正常的。因此,他们都不会相互影响。 async场景最适合Messaging。有了它,我们可以比第一个消息更快地处理第二个消息。

你的要求是足够的兴趣,我不敢称之为奇怪。因为任何企业都可能存在。

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

否则我们没有任何关于这些文件的group消息的挂钩。

从另一方面,您可以考虑将<int-sftp:outbound-gateway>MGET命令一起使用:http://docs.spring.io/spring-integration/docs/latest-ga/reference/html/sftp.html#sftp-outbound-gateway