我想重用现有的流链而不改变其预期的有效负载并从新流中调用它。但是,我不确定如何在不丢失新流的有效负载的情况下调用现有流。这一切都必须在一次交易中。我正在使用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存储有效负载?
答案 0 :(得分:1)
有几种技术和组件可以从另一个流中调用一个流。所有概念和原则都来自原始的Spring Integration。
当您向请求通道发送消息并等待来自该子流或其他流的回复时,其中一个是.gateway()
。但在这种情况下,reply
成为主流中下一个端点的payload
。
其他组件.enrich()
与.gateway()
几乎相同,但会根据回复丰富现有的payload
或headers
。我认为,对于您的用例,如果您希望继续使用相同的headers
,则可以省略properties
和payload
浓缩。
无论如何,我会说你的用例看起来像.publishSubscribeChannel()
,有两个订阅者使用相同的payload
。现有流程应作为第一个订户,新流程作为第二个订户。应该没有任何Executor
(默认)配置所有内容,因此只有在第一个成功完成后才会调用第二个流。
您可以将payload
存储在headers
中:
.enrichHeaders(h ->
h.headerFunction("originalPayload", Message::getPayload))