【问题标题】:Stopping Spring Integration app after processing all messages from FTP list处理来自 FTP 列表的所有消息后停止 Spring Integration 应用程序
【发布时间】:2012-10-30 17:18:16
【问题描述】:

在 Spring Integration 应用程序处理完由一系列 FTP Outbound Gateway ls 命令产生的所有消息后,停止它的最佳方法是什么?

作为一项一次性工作,我需要遍历 FTP 目录结构,对找到的每个目录进行递归,并复制每个文件,然后将其作为消息发送以进行处理。一旦 FTP 目录树被完全遍历,并且遍历产生的所有消息都已被处理,我想优雅地停止应用程序。

我目前的想法是,我可以尝试跟踪网关和所有队列的活动,当它们的大小都为 0 一段时间后,终止应用程序。这可以通过做一些事情来变得更加复杂,比如为每个目录记录所有文件的数量(这需要扩展AbstractRemoteFileOutboundGateway),确保目录名称保留在整个流程中的所有消息头上,然后有一个下游组件来记录每个目录处理的消息计数,并在所有消息都被计算完后启动关闭。

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

【问题讨论】:

    标签: java spring ftp spring-integration


    【解决方案1】:

    有点绕,不过这是我能想到的办法:

    .1。由于您必须放置消息以触发 ftp 出站网关,因此在您触发所有消息后,放置一条带有 STOP 的虚拟消息,例如作为有效负载。就在出站 ftp 网关之前放置一个路由器,该路由器将选择性地将消息发送到 ftp 网关或步骤后 FTP 网关 - 通过一次只接受一条消息的通道发送它,以便对消息进行序列化。

    .2。当您收到 STOP 消息时,一旦进入文件处理通道,请将此消息发送到特定队列通道,例如停止队列通道。

    .3。在您的主程序中获取对此停止队列通道的引用,一旦您启动 SI 流程,只需等待消息到达队列通道,一旦 STOP 消息到达此队列通道,您的主方法将继续并且流程应该停止此时。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-05
      • 2016-09-16
      相关资源
      最近更新 更多