Spring Integration:Scatter-Gather模式实现

时间:2017-09-14 08:49:31

标签: java spring asynchronous spring-integration

我正在使用Spring Integration开发文件解析系统。

下一个场景是: Poller从目录中获取文件,然后我们应用一些转换,解析等...最后我们需要将数据存储到两个源(mongoDB和File System)并删除原始文件。

我正在使用Scatter-Gather模式并行执行存储操作。

问题:如何自动发布群组?并将聚合结果路由到最终处理程序?

这是一个代码示例:

@Bean
public IntegrationFlow processDomainFileFlow() {
    return IntegrationFlows
            .from("receiverChannel") 
            .scatterGather(scatterer -> scatterer
                                .recipientFlow(m -> true, subFlow -> subFlow.handle(new DataToMongoHandler()))
                                .recipientFlow(m -> true, subFlow -> subFlow.handle(new DataToFileStorageHandler())),
                        gatherer -> gatherer
                                .releaseStrategy(group -> group.size() == 2),
                    scatterGatherSpec -> scatterGatherSpec
                            .gatherChannel(MessageChannels.direct("gateway").get()))
            .get();
}

这是一个最终的处理程序:

@Bean
public IntegrationFlow gatewayFlow(){
    return IntegrationFlows.from("gateway")
            .handle(new DeleteOriginalFileHandler())
            .get();
}

1 个答案:

答案 0 :(得分:0)

添加aggregator(),将其配置为在大小为2时释放该组;更改子流以在成功后向聚合器发送消息。