2013-10-02 85 views
0

一個類似的,但更一般的問題已在這裏問: Business logic in Camel processors vs service endpointsApache Camel - 從處理器內發出HTTP請求

現在考慮下面的流程(E1和E2代表處理器,它們不是端點如在駱駝流),其餘與參數觸發(P,Q)

Route: E1 -> E2 

E1本身問題與參數(p,q)一個HTTP請求,接收到該響應數據d(同步)和轉發給E2,繼續基於處理(p,q,d) 。因此,它基本上豐富了附加數據的輸入。

被調用的端點包含要整合的數據,即這不會改變,並且將來不需要配置。

我嘗試了兩種解決方案,這兩者似乎有種我錯了:在消息(或者1的可替代性的標題

  • 使用http4:url端點和搭載了(P,Q)交換)。
  • 使用顯式/編程方式發出http請求的處理器,處理響應並轉發預期的(p,q,d)。爲了方便起見,我在駝峯背景下將producerTemplate發送給http4:url

第一個問題是,它增加了許多樣板製造商等,使實際的路線真正晦澀。第二種方法允許將處理卸載到新類中(而不是將其混合到路由中),但仍需要駱駝上下文並取決於此。

這是什麼建議。我無法找到周圍任何東西,除了像等「不與配線混合的商業邏輯」更抽象的語句

*增加了實際使用案例*

E1得到兩個日期(時間跨度)和部門名稱,可獲取指定時間段內指定部門中的所有名稱。然後(上面我忽略了這個細節)名稱被分割,並且對於每個單獨的名稱,所有數據都被保存在指定的日期範圍內。對於最後一步,需要輸入第一個日期(因此這些需要通過整個路線)。

感謝, 馬庫斯

+0

你說的是豐富的E2的消息,再看看在內容富集EIP –

+0

我要豐富它的E1,並將其轉發到E2。也許我應該提一下,E1和E2不是端點,而是處理器 - 我添加了真實的用例 – fricke

+0

本質上,它是我需要的一個豐富的東西。但在這裏,我的問題是如何實現處理器實現這種豐富,即如果可以在處理器內使用templateProducer?或者我應該試着讓這個處理器獨立於駱駝環境。 – fricke

回答

0

感謝克勞斯:

您可以無論如何你喜歡充實的消息。駱駝並不在乎。如果你使用處理器/ pojo它只是java代碼,你可以做任何你想要的。如果您使用enrich/pollEnrich DSL,那麼他們使用AggregationStrategy來「合併」濃縮。

我通過http4:url端點的結果豐富了路由的原始輸入。通過這種方式,我可以將數據從「業務邏輯」中「提取」出來,現在發生在獨立於其餘(特別是駱駝)的處理器/ AggregationStreategy bean上。

感謝 馬庫斯