如何使用Apache Camel聚合器

时间:2017-05-20 23:03:10

标签: apache-camel

我有一个非常简单的用例,我想在其中汇总一组stings并尝试使用聚合器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);
    }
}

当然,解决此问题的一种非常简单的方法是创建聚合策略实现并配置我的路由以使用它。但是,我想了解为什么现在设置方式不起作用。根据{{​​3}}上的骆驼文档:

  

默认情况下,Camel使用DefaultAggregationCollection和   UseLatestAggregationStrategy,所以这个简单的例子将保留   给定相关表达式的最新收到的交换

我还注意到DefaultAggregationCollection不再是骆驼核心的一部分。那么我在这里缺少什么?

2 个答案:

答案 0 :(得分:0)

这是旧文档。正确的文档位于:http://camel.apache.org/aggregator2

例如,EIP列表包含指向正确文档的链接:http://camel.apache.org/eip

您可以在这些小例子中找到这些链接中的示例:https://github.com/apache/camel/blob/master/examples/camel-example-aggregate/README.md

Camel in Action书籍有一个EIP章节,其中聚合器也包含更多细节:http://camel.apache.org/books

答案 1 :(得分:0)

我制作了一个小视频来演示使用 SpringBoot 和 Camel 的这种 EIP 模式。

看看这里:https://youtu.be/IdGuGGVv51Q