Spring 依次运行IntegrationFlow

Spring 依次运行IntegrationFlow,spring,spring-integration,Spring,Spring Integration,我有两个用于导入头部和位置数据的集成流。 对于导入,我使用csv文件,这些文件以文件夹结构组织。头部CSV文件位于头部文件夹中,模具位置文件位于位置文件夹中。 csv文件的结构当然不同 现在有必要在导入位置数据之前导入头部数据。但是,如果没有可用的头部数据,则仍应处理位置文件夹。例如,对于现有头部的位置更新 目前我有两个集成流。每种情况一个 是否有可能一个接一个地调用此集成流?如果不是,是否有可能通过聚合方法,通过一个集成流使用两个不同的消息源,并有可能检测它是头部还是位置,以及头部消息源是否在

我有两个用于导入头部和位置数据的集成流。 对于导入,我使用csv文件,这些文件以文件夹结构组织。头部CSV文件位于头部文件夹中,模具位置文件位于位置文件夹中。 csv文件的结构当然不同

现在有必要在导入位置数据之前导入头部数据。但是,如果没有可用的头部数据,则仍应处理位置文件夹。例如,对于现有头部的位置更新

目前我有两个集成流。每种情况一个

是否有可能一个接一个地调用此集成流?如果不是,是否有可能通过聚合方法,通过一个集成流使用两个不同的消息源,并有可能检测它是头部还是位置,以及头部消息源是否在该位置上进行的安全性

@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
支持将是另一种方法。
当然还有一堆提供的入站/出站适配器。

谢谢。如果我理解正确,我应该在.handlejob之后做一个.channelmyMessageChannel,第二个集成流应该由这个通道初始化,对吗?但是我如何才能给secondIntegrationFlow一个新的消息源和位置数据呢?还是我不明白你的答案?您可以添加一个小的代码示例吗?集成流可能有很多源。这是具有通道抽象的主要优点之一。例如,假设我们将此通道称为flowBridgeChannel。现在,FlowA在完成后向该通道发送消息,实质上启动了FlowB。除了由FlowA启动外,FlowB还可以具有其他MessageSources,这些MessageSources将向同一flowBridgeChannel发送消息。换句话说,flowBridgeChannel可以由多个来源提供信息,但下游的一切都保持不变。理论上,我想我知道该怎么做…但我无法让它工作…你说FlowB可以有额外的消息源向频道发送消息。但是如何在FlowB中添加这些消息源呢。我怎样才能确定,只有从floatA发送到sharedChannel的消息才会激活flowB。抱歉,如果我的问题有点基本…但我似乎还没有完全理解流和通道功能