2017-05-23 46 views
0

我對Apache Camel相當新,並有幾個問題。我希望我的路線,做到以下幾點:名單Apache Camel加入所有交換嵌套拆分

  • 負荷列表中LoadSomeThingsProcessor
  • 分裂兩次,這樣我就可以在內部列表處理每個項目
  • 過濾掉一些東西,我不需要
  • 加入從內部分裂
  • 然後最終再加入(回一個交換)

我的路線,看起來SOM所有剩餘的交流ething像下面這樣:

from("direct:myRoute") 
    .process(new LoadSomeThingsProcessor()) 
    .split(body()) 
    .streaming() 
    .process(new SomeProcessor()) 
    .split(body()) 
    .streaming() 
    .filter(new SomeFilter()) 
    .aggregate(header("myHeader", new MyAggregationStrategy()) 
    .completionPredicate(new MyCompletionPredicate()) 
    // more processors 
    // aggregate again (should just be one exchange after this point 
    // more processors 
    .to("direct:someOtherRoute"); 

MyCompletionPredicatematches方法就是:

return exchange.getIn().getProperty("CamelSplitComplete", Boolean.class); 

我想確保每個分割所有交換聚合在一起之前,我繼續。

我的問題是: - CamelSplitComplete標題在某種程度上從未如此。什麼會造成這種情況? - 是否試圖在嵌套的分割內聚集導致任何問題? - 如果最後一次交換(應該有CamelSplitComplete = true的交換被過濾掉了,會發生什麼情況?我如何知道我彙總了所有交換? - 這是否是解決此問題的正確方法?如果不是,還有什麼我應該考慮?

FYI我的聚合策略只是需要新的交易所的屍體,並將它們添加到老交換的身體。

很多感謝。

回答

0

見編寫的消息處理器EIP:http://camel.apache.org/composed-message-processor.html

有一個例子,標題爲Splitter Only它允許執行fork/join風格。你仍然可以使用分離器中的過濾器來過濾掉特定的物品等。

並嘗試不使它變得複雜2 x分割和所有類型的東西 - 保持它簡單一點,然後它的更容易使用,測試和工作。