Ich habe einen sehr einfachen Anwendungsfall, in dem ich eine Sammlung von Stichen zusammenstellen und versuchen, Aggregator EIP dafür zu verwenden. Allerdings, wenn die Strecke zu starten versucht, es klagt kann es keine Aggregator Strategie finden:Wie Apache Camel Aggregator zu verwenden
java.lang.IllegalArgumentException: AggregationStrategy or AggregationStrategyRef must be set on Aggregate
unten ist, wie ich das Problem reproduzieren kann:
import org.apache.camel.RoutesBuilder;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.test.junit4.CamelTestSupport;
import org.junit.Test;
import java.util.Arrays;
import java.util.List;
public class AggregatorTest extends CamelTestSupport {
private static final List<String> LIST = Arrays.asList(new String[] {"one", "two", "three"});
@Override
protected RoutesBuilder createRouteBuilder() throws Exception {
return new RouteBuilder() {
@Override
public void configure() throws Exception {
from("direct:start")
.split().body()
.setHeader("cheese", constant("camembert"))
.aggregate(constant("all"))
.to("mock:end");
}
};
}
@Test
public void shouldAggregateStrings() throws Exception {
sendBody("direct:start", LIST);
}
}
Natürlich eine sehr einfache Möglichkeit, dies zu beheben würde sei es, eine Aggregationsstrategie-Implementierung zu erstellen und meine Route zu konfigurieren, um sie zu verwenden. Allerdings würde ich gerne verstehen, warum der Weg jetzt eingerichtet ist, funktioniert nicht. Nach Angaben der Kamel-Dokumentation auf here:
standardmäßig Camel DefaultAggregationCollection und UseLatestAggregationStrategy verwendet, so dieses einfache Beispiel wird
nur die zuletzt empfangenen Austausch für die gegebene Korrelation Expression halten
Ich habe auch bemerkt DefaultAggregationCollection ist nicht mehr Teil des Kamelkerns. Also was fehlt mir hier?