从新流程调用现有流程,然后继续使用新流程

时间:2016-06-08 05:40:47

标签: spring-integration

我想重用现有的流链而不改变其预期的有效负载并从新流中调用它。但是,我不确定如何在不丢失新流的有效负载的情况下调用现有流。这一切都必须在一次交易中。我正在使用Spring Integration DSL Lambdas。这是它的样子

            Validation Flow B
                     |
                   Route
                   /   \
         Error Flow    Existing Validation Flow A -- Existing Persist Flow A
                                                              |
                                  ----------------------------
                                  |
                           New Persist Flow B

在Persist Flow A成功后,我想继续将Validation Flow B中的原始有效负载转换为Persist Flow B.我应该将其保存在标题中吗?我知道如何在标题中设置值。如何使用DSL在标头中设置有效负载。或者有没有办法在标题中存储声明检查,而不是使用DSL存储有效负载?

1 个答案:

答案 0 :(得分:1)

有几种技术和组件可以从另一个流中调用一个流。所有概念和原则都来自原始的Spring Integration

当您向请求通道发送消息并等待来自该子流或其他流的回复时,其中一个是.gateway()。但在这种情况下,reply成为主流中下一个端点的payload

其他组件.enrich().gateway()几乎相同,但会根据回复丰富现有的payloadheaders。我认为,对于您的用例,如果您希望继续使用相同的headers,则可以省略propertiespayload浓缩。

无论如何,我会说你的用例看起来像.publishSubscribeChannel(),有两个订阅者使用相同的payload。现有流程应作为第一个订户,新流程作为第二个订户。应该没有任何Executor(默认)配置所有内容,因此只有在第一个成功完成后才会调用第二个流。

您可以将payload存储在headers中:

.enrichHeaders(h ->
        h.headerFunction("originalPayload", Message::getPayload))