0

私は file: route camel コンポーネントを持っています。これは、停止条件として completionFromBatchConsumer を使用して AggregationStrategy を使用します。

私のアグリゲーターは CompletionAwareAggregationStrategy を実装しています

ルート自体は正常に機能します。

現在、別のプロセスによって書き込まれているファイルをスキップする readLock=changed 戦略を定義しようとしていますが、これも正常に機能します。

問題は、readLock が原因でファイルがスキップされると、バッチ サイズが更新されないように見えるため、アグリゲーターの onCompletion メソッドが呼び出されず、デッド ルートが発生することです。

キャメルはバッチのサイズを計算する前に readLock をチェックすべきではありませんか? これまたは同等の解決策を達成する方法はありますか?

TKS

4

1 に答える 1

1

ああ、あなたは警告を打った。読み取りロックは、積極的にではなく、オンザフライで適用されます。そのため、バッチ コンシューマには 10 個のファイルが表示される場合がありますが、読み取りロックは現在 9 個のファイルにしか適用できません。また、読み取りロックのタイムアウトがある場合、ファイルはスキップされます。タイムアウトがない場合は、最終的に読み取りロックが許可され、10 個のファイルすべてを処理できます。

完了の詳細がそれに応じて更新される可能性があるため、何か簡単にできるかどうかはわかりませんが、最後のファイルは読み取りロックの問題である可能性があります。そして、トリガーがなくなります。

許可されていない読み取りロックで空の交換を発行する機能を追加できます。そして、これを認識し、カスタム集計戦略でこれに対処する必要があります。

于 2012-10-29T11:35:05.587 に答える