2016-04-23 77 views
1

是否有可能不建立在這樣的情況下路由器在使用Spring集成後,一個新的通道:使用某種類型的路由器EIP路由器使用,而不會引入一個新的通道之後

  1. (如HeaderValueRouter
  2. 基礎1上做一些不同的事情(例如,如果消息報頭與值A的參數都行actionA,若參數值B將做actionB等)
  3. 下一步做共同的東西

這裏的步驟1-2實際上並沒有定義不同的執行路徑,而只是溫度分支。

目前我有提取3個集成步驟到一個單獨的流定義一個新的直接輸入信道,並在步驟2中的溶液看起來人工和繁瑣使用該信道名。

我可以不這樣做,不知何故?

回答

1

首先,讓我們來看看像它是一個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()之後,任何路由器的子流程都會返回到主流程。再次感謝您有用的答案

+0

謝謝! 我絕對有'EIP Router'經典行爲和'subFlowMapping'擴展同意正是我要找的。這一定會簡化我的流程! 是否可以指定'switch ... case ... default'行爲?如果路由器沒有選擇其他替代方案,我需要指定'default'執行分支。 –

+0

'開關... ...的情況下默認'可以像.route的'()的一部分'LAMBDA,你到底增加一個'subFlowMapping( 「默認」')'。 –

+0

我明白你的觀點,並且在某些情況下可以按照你的建議來實現,但是......並非總是如此,並且對於「默認」執行分支或通道有專門的DSL指令會更好。 –

相關問題