首页 > 解决方案 > 依次运行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();
    }
}

标签: springspring-integration

解决方案


有很多方法可以做到这一点。

如果两个集成流程在同一个 JVM 中运行,最简单、最自然的方法是共享一个通道。基本上创建一个实例MessageChannel并将其连接到一个 floe 的末尾和另一个 floe 的开头。

floaA -> sharedChannel -> flowB

ApplicationEvent支持将是另一种方法。当然还有一堆提供的入站/出站适配器。


推荐阅读