2012-10-30 18 views
0

处理所有消息什么是它处理的是源于一系列的FTP出站网关ls命令的所有消息后停止Spring集成应用的最佳方式后?停止Spring集成的应用程序从FTP列表

作为一次性的工作,我需要遍历一个FTP目录结构,递归找到的每个目录,并抄下每一个文件,然后把它作为信息进行处理。一旦FTP目录树已完全遍历,所有由遍历产生的消息都已处理完毕,我想要优雅地停止应用程序。

我现在的想法是,我会尽量保持在网关和所有队列的活动轨迹,当他们都具有一个大小为0的同时,终止应用程序。通过执行这样的操作可以使得更复杂一些,如保持每个目录的所有文件的计数(这需要扩展AbstractRemoteFileOutboundGateway),确保目录名保留在通过流的所有消息头中,然后具有下游组件保持每个目录处理的消息的计数,并且一旦它们全部被计入,就启动关闭。

这听起来像一个相当数量的工作 - 没有人知道一个简单的方法?我可以选择在没有Spring Integration的情况下编写应用程序,并手动执行繁重的工作(迭代FTP树,复制文件)或使用Spring Integration,但必须扩展它的某些部分以匹配我的用例。

回答

1

稍微迂回的,但是这是我能想到的办法:

0.1。由于必须将消息放到触发ftp出站网关的位置,所以在触发所有消息后,将带有STOP的伪消息称为有效负载。在出站ftp网关之前,将路由器放置到位,可以选择性地将消息发送到ftp网关或步骤后FTP网关 - 通过一次只接受一条消息的通道发送消息,以便消息被序列化。

.2。一旦在您的文件处理通道中收到停止消息时,将此消息发送到特定队列通道,如停止队列通道。

.3。在你的主程序中获得对这个停止队列通道的引用,并且一旦你开始了SI流程,就等待消息进入队列通道,一旦STOP消息进入这个队列通道,你的主要方法将继续并且流程应该停止在此刻。

相关问题