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