spring - 依次运行IntegrationFlow
问题描述
我有两个用于导入头部和位置数据的集成流。对于导入,我使用以文件夹结构组织的 csv 文件。Head-CSV-Files 位于 Head-Folder 中,而 Position-Files 位于 Position-Folder 中。csv 文件的结构当然是不同的。
现在有必要在位置数据之前导入头部数据。但是当没有可用的 Head Data 时,无论如何都应该处理 Position-Folder。(例如,现有头部的位置更新)
目前我有两个集成流。每个案例一个。
有没有可能一个接一个地调用这个集成流?如果没有,是否有任何可能性(可能通过聚合方法),通过一个集成流使用两个不同的消息源,有可能检测它是头部还是位置,并且安全性,头部消息源继续进行在职位之前?
@Configuration
public class MyHeadFlowConfig
@Bean
public IntegrationFlow myHeadFlow() {
return IntegrationFlows.from(myHeadMessageSource, myPollerConsumer))
.filter(new SimplePatternFileListFilter("*.csv"))
.handle(myHeadJobConfig)
.get();
}
}
@Configuration
public class MyPositionFlowConfig
@Bean
public IntegrationFlow myPositionFlow() {
return IntegrationFlows.from(myPositionMessageSource, myPollerConsumer))
.filter(new SimplePatternFileListFilter("*.csv"))
.handle(myPositionJobConfig)
.get();
}
}
解决方案
有很多方法可以做到这一点。
如果两个集成流程在同一个 JVM 中运行,最简单、最自然的方法是共享一个通道。基本上创建一个实例MessageChannel
并将其连接到一个 floe 的末尾和另一个 floe 的开头。
floaA -> sharedChannel -> flowB
ApplicationEvent支持将是另一种方法。当然还有一堆提供的入站/出站适配器。
推荐阅读
- angular - 在下面的代码中使用 Take 和 switch rxjs 运算符
- java - OnclickListener 对于动态膨胀视图无法正常工作
- google-sheets - 当数字中的最后一位为 0 时,Importrange 不起作用
- css - 如何编写只在非IE、非Edge浏览器中有效的CSS?
- ios - Why is text encryption failing in CryptoSwift on Swift5?
- python - 如何在 HTTP POST 有效负载中存储 JPG 图像
- php - 代客工作但无法创建新的 Laravel 安装?
- wpf - 从单独的框架/页面打开框架中的页面
- javascript - 具有可调整大小的列的引导 Vue 表
- git - 如果我为组织做出贡献,如何使分叉的 repo 具有与原始 repo 相同的明星和观察者