0

いくつかの 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");
4

1 に答える 1

1

奇妙ですが、分割されたすべてのメッセージを集約したい場合は、単に使用できます

.split(body(), batchAggregationStrategy())

そして、あなたがそれをどのように機能させたいかに応じて、あなたは使用することができます

.shareUnitOfWork().stopOnException()

詳細については、 http://camel.apache.org/splitter.htmlを参照してください。

于 2015-08-28T08:48:24.533 に答える