Camel聚合器在新关联密钥上完成聚合

时间:2015-02-17 15:31:55

标签: java apache-camel

基本上我有一组大字符串,它们以较小的块发送到聚合器。我想将它们聚合成完整的字符串。

标头有一个strId,我想用它作为相关键。当我们收到带有新strId的标头时,前一个字符串的聚合应该是完整的。

我想知道这是否可以使用驼峰聚合器

1 个答案:

答案 0 :(得分:3)

您可以使用bean来保存简单状态,使用completionPredicate聚合器。

from("direct:aggregator")
        .aggregate(constant(true), myAggregationStrategy)
        .completionPredicate(method(new MyBean(), "changed(${header.strId})"))
        .eagerCheckCompletion()
        .log("COMPLETE: ${body}")
;

和一个简单的bean:

public static class MyBean {
    public String oldval;
    public boolean changed(String newval) {
        boolean changed = oldval!=null && !newval.equals(oldval);
        oldval = newval;
        return changed;
    }
}

请注意,在strId更改之前,您不会收到正在汇总的排队邮件。