首先,讓我們來看看像它是一個EIP component:
一個消息路由器,這消耗從一個消息信道的消息,並將其重新發布到根據一組不同的消息信道的信道條件。
來自對岸,以達到最佳鬆耦合和更好的模塊,路由器一無所知donwstream流 - 僅僅只有它的輸入通道到路由器。
如果您想要一些簡單的if...else
邏輯,但不涉及邏輯中的消息傳遞,那麼您可以在某種POJO方法中編寫該邏輯,並使用.handle()
可以達到所需的行爲。
路由器必須唯一途徑,僅此而已!
從對方作出了DSL一點有用的,我們已經介紹了subflow
符號,你可以映射使用subFlowMapping
路由邏輯:
@Bean
public IntegrationFlow routerTwoSubFlows() {
return f -> f
.split()
.<Integer, Boolean>route(p -> p % 2 == 0, m -> m
.subFlowMapping("true", sf -> sf.<Integer>handle((p, h) -> p * 2))
.subFlowMapping("false", sf -> sf.<Integer>handle((p, h) -> p * 3)))
.aggregate()
.channel(c -> c.queue("routerTwoSubFlowsOutput"));
}
的.channelMapping()
繼續在普通路由器映射到工作,但.subFlowMapping()
將該子流與主流聯繫起來。換句話說,在.route()
之後,任何路由器的子流程都會返回到主流程。再次感謝您有用的答案
謝謝! 我絕對有'EIP Router'經典行爲和'subFlowMapping'擴展同意正是我要找的。這一定會簡化我的流程! 是否可以指定'switch ... case ... default'行爲?如果路由器沒有選擇其他替代方案,我需要指定'default'執行分支。 –
'開關... ...的情況下默認'可以像.route的'()的一部分'LAMBDA,你到底增加一個'subFlowMapping( 「默認」')'。 –
我明白你的觀點,並且在某些情況下可以按照你的建議來實現,但是......並非總是如此,並且對於「默認」執行分支或通道有專門的DSL指令會更好。 –