Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 驼峰聚合器在新的相关键上完成聚合_Java_Apache Camel - Fatal编程技术网

Java 驼峰聚合器在新的相关键上完成聚合

Java 驼峰聚合器在新的相关键上完成聚合,java,apache-camel,Java,Apache Camel,基本上,我有一组大字符串,它们以较小的块发送到聚合器。我想把它们聚合回完整的字符串中 标题有一个strId,我想用它作为相关键。当我们收到一个带有新strId的头时,前一个字符串的聚合应该完成 我想知道是否可以使用camel聚合器来实现这一点,您可以使用一个bean来保存简单的状态,使用一个带有completionPredicate的聚合器来实现这一点 from("direct:aggregator") .aggregate(constant(true), myAggregati

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

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


我想知道是否可以使用camel聚合器来实现这一点,您可以使用一个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
更改之前,您不会收到正在聚合的排队消息。

我不能使用批大小或完成超时,因为字符串可以任意长。我们将有一个聚合交换,直到一个具有不同strId的新交换到达。此时,前一批的聚合完成,新批将使用strIdAh的相关键开始,好的,这使它变得更容易。您不需要聚合器,您可以使用bean。我会改变答案的