いくつかの Java オブジェクトを分割してから集約しています。この補完戦略が Camel (2.15.2) でどのように機能するか、ちょっと混乱しています。完了サイズと完了タイムアウトを使用しています。私の理解が正しければ、完了タイムアウトはあまり影響しません。なぜなら、ここで待っていることはあまりないからです。
全体で、3000 以上のオブジェクトがあります。ただし、一部のみが集約されているようです。しかし、完成サイズの値を変えると状況が変わります。大きさが100なら800くらい、200なら1600くらいまで集まります。 ただ、オブジェクトの大きさは事前にわからないので、想定数に頼ることはできません。
ここで私が間違っていることを誰かに説明してもらえますか? 私がeagerCheckCompletionを使用すると、すべてが一度に集約されますが、これは望ましくありません。以下は私のルートです:
from("direct:specializeddatavalidator")
.to("bean:headerFooterValidator").split(body())
.process(rFSStatusUpdater)
.process(dataValidator).choice()
.when(header("discrepencyList").isNotNull()).to("seda:errorlogger")
.otherwise().to("seda:liveupdater").end();
from("seda:liveupdater?concurrentConsumers=4&timeout=5000")
.aggregate(simple("${in.header.contentType}"),
batchAggregationStrategy())
.completionSize(MAX_RECORDS)
.completionTimeout(BATCH_TIME_OUT).to("bean:liveDataUpdater");
from("seda:errorlogger?concurrentConsumers=4")
.aggregate(simple("${in.header.contentType}"),
batchAggregationStrategy("discrepencyList"))
.completionSize(MAX_RECORDS_FOR_ERRORS)
.completionTimeout(BATCH_TIME_OUT)
.process(errorProcessor).to("bean:liveDataUpdater");