Java 处理FTP列表中的所有消息后停止Spring集成应用程序
在Spring集成应用程序处理了一系列FTP出站网关Java 处理FTP列表中的所有消息后停止Spring集成应用程序,java,spring,ftp,spring-integration,Java,Spring,Ftp,Spring Integration,在Spring集成应用程序处理了一系列FTP出站网关ls命令产生的所有消息后,停止该应用程序的最佳方法是什么 作为一次性工作,我需要遍历FTP目录结构,对找到的每个目录进行递归,复制每个文件,然后将其作为消息发送以进行处理。一旦FTP目录树被完全遍历,并且遍历产生的所有消息都被处理完毕,我想优雅地停止应用程序 我目前的想法是,我可以尝试跟踪网关和所有队列的活动,当它们的大小都为0时,终止应用程序。这可能会变得更加复杂,方法是为每个目录保留所有文件的计数(这需要扩展AbstractRemoteFi
ls
命令产生的所有消息后,停止该应用程序的最佳方法是什么
作为一次性工作,我需要遍历FTP目录结构,对找到的每个目录进行递归,复制每个文件,然后将其作为消息发送以进行处理。一旦FTP目录树被完全遍历,并且遍历产生的所有消息都被处理完毕,我想优雅地停止应用程序
我目前的想法是,我可以尝试跟踪网关和所有队列的活动,当它们的大小都为0时,终止应用程序。这可能会变得更加复杂,方法是为每个目录保留所有文件的计数(这需要扩展AbstractRemoteFileOutboundGateway
),确保目录名在流中的所有消息头上保持不变,然后拥有一个下游组件,该组件为每个目录保留已处理的消息计数,并在所有消息都被记录后启动关闭
这听起来是相当多的工作——有人知道更简单的方法吗?我可以选择在没有Spring集成的情况下编写应用程序,或者手工完成大量繁琐的工作(迭代FTP树,复制文件),或者使用Spring集成,但必须扩展部分以匹配我的用例。稍微绕开一点,但这是我可以想到的一种方法: .1。由于必须放置消息以触发ftp出站网关,因此在触发所有消息后,放置一条带有STOP say作为有效负载的虚拟消息。在出站ftp网关安装路由器之前,路由器将有选择地向ftp网关或step post ftp网关发送消息-通过一个一次只接受一条消息的通道发送消息,以便对消息进行序列化 .2。一旦进入文件处理通道,当您收到停止消息时,将此消息发送到特定的队列通道,例如停止队列通道 .3。在主程序中,获取对此停止队列通道的引用,一旦启动SI流,只需等待消息到达队列通道,一旦停止消息到达此队列通道,您的主方法将继续,并且流应在此点停止