私は Apache Camel を使用しており、1 行ずつ処理する必要がある入力用の大きなファイルを取得しています。コンテンツは既にソートされており、連続するすべての行を同じ相関キーで集約する必要があります。相関キーが変更された場合、前の集計を完了する必要があります。ファイルが終了すると、最後の集約も完了します。いくつかの制約があります: - 受信ファイルがかなり大きいため、ストリーミング方式で処理したいと考えています。・結果が同期エンドポイントに渡されるため、タイムアウト完了述語は使いたくない。そうしないと、データ ソースの消費速度を調整する背圧が失われ、交換がタイムアウト マップと AggregateProcessor の集約リポジトリに蓄積されます。
PreCompletionAwareAggregationStrategy は有望なソリューションのように見えますが、最後の集計は次のファイルが到着するまで完了しないことが判明しました。preComplete で CamelSplitComplete プロパティを使用すると、最後の集約は完了しますが、最後の着信交換はありません。代わりに、この最後の交換は、次に到着するファイルのコンテンツに追加されます。
そのため、現在、過度に醜くない解決策を見つけるのにかなり迷っています。