我想实现以下功能:
将指定远程目录中的所有文件下载到本地目录。
下载所有文件后,我需要一个包含所有下载文件的列表文件。 (当成功下载所有文件时,我只想要这个列表文件。)
第1点:
假设我们在远程目录中有大约10个文件。
我可以使用int-sftp:inbound-channel-adapter
组件下载所有文件,但需要10个轮询周期才能下载所有文件,因为入站组件每个轮询请求只能下载1个文件。
Spring Integration逐个创建10条文件消息。
问题:
如何识别从FTP服务器收到的最后一个文件(消息)?
我不希望让用户访问列表文件,直到成功收到FTP中的所有文件。 我怎么能得到这个? 我可以使用int-file:outbound-channel-adapter将文件名写入列表文件,但是用户可以在下载过程完成之前从该文件中读取temorary信息。
如何触发下载FTP上所有文件的事件?
感谢您的建议
Ferenc的
答案 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