2017-05-23 8 views
0

Ich bin ziemlich neu in Apache Camel und habe ein paar Fragen. Ich möchte meinen Weg folgendes zu tun: zweimalApache Camel beitreten alle Börsen in verschachtelten Split

  • Last eine Liste von Listen in LoadSomeThingsProcessor
  • gespalten, so kann ich
  • Filter jedes Element in der inneren Liste Griff aus ein paar Dinge, die ich nicht
  • brauchen
  • kommen alle übrigen Börsen von der inneren Spaltung
  • dann wieder schließlich kommen (zurück zu einem Austausch)

Meine Route, die som sieht ething wie folgt aus:

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"); 

MyCompletionPredicate ‚s matches Methode ist einfach:

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

Ich möchte sicherstellen, dass jeder Austausch in jedem Split zusammen aggregiert werden, bevor ich weiter.

Meine Fragen sind: - Die CamelSplitComplete Header ist irgendwie nie wahr. Was könnte das verursachen? - Wird versucht, in einem verschachtelten Split zu aggregieren, um Probleme zu verursachen? - Was passiert, wenn der letzte Austausch (der, der CamelSplitComplete = true haben soll, herausgefiltert wird? Wie kann ich wissen, dass ich alle meine Austauschvorgänge zusammengelegt habe? - Ist das der richtige Weg, um dieses Problem anzugehen? was soll ich sonst noch beachten?

FYI meiner Aggregationsstrategie nimmt nur den Körper der neuen Börse und fügt sich den Körper des alten Austausches.

Vielen dank im Voraus.

Antwort

0

Siehe Komponiert Nachricht Prozessor EIP: http://camel.apache.org/composed-message-processor.html

Und es gibt ein Beispiel mit dem Titel Splitter Only, die ermöglicht, eine Gabel/Join-Stil zu tun. Sie können immer noch einen Filter im Splitter verwenden, nur um bestimmte Gegenstände herauszufiltern usw.

Und versuchen Sie es nicht zu kompliziert mit 2 x Splits und allerlei Zeug - halten Sie es ein bisschen einfacher als es viel einfacher zu bedienen ist , testen und arbeiten mit.