【发布时间】:2021-07-10 03:59:21
【问题描述】:
我有一个非常简单的用例,我想将一组 sting 放在一起,并尝试为此使用聚合器 EIP。但是,当尝试启动路由时,它会抱怨找不到聚合器策略:
java.lang.IllegalArgumentException: AggregationStrategy or AggregationStrategyRef must be set on Aggregate
下面是我如何重现该问题:
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);
}
}
当然,解决这个问题的一个非常简单的方法是创建一个聚合策略实现并配置我的路由以使用它。但是我想了解为什么现在设置的方式不起作用。根据here 上的骆驼文档:
默认情况下,Camel 使用 DefaultAggregationCollection 和 UseLatestAggregationStrategy,所以这个简单的例子将保持 给定相关表达式的最新接收交换
我还注意到 DefaultAggregationCollection 不再是骆驼核心的一部分。那么我在这里缺少什么?
【问题讨论】:
标签: java apache-camel