0

1 つの大きな入力ファイルが多くの個別のファイルにバーストされ、Spring Integration Aggregator を使用して再び集約される Spring Integration プロジェクトがあります。

パイプラインには、不要な個々のファイルを除外する多数のフィルターがあります。相関入力ファイルごとにフィルタリングされたファイルの数を追跡します。@ReleaseStrategy は、個々のファイルの数からフィルター処理された個々のファイルの数を引いた数を受け取ったかどうかを確認します。

ReleaseStrategy に到達する前に、処理される最後の個々のファイルがフィルター処理されるとどうなりますか? ReleaseStrategy は、それに到達する個々のファイルごとに呼び出されます。最後の個々のファイルがフィルター処理された場合、再度ポーリングされることはありませんが、Spring がこのユース ケースを予測し、まだ提供している非ハック的な規定を作成していることも期待できます。 @Aggregator イベントで私。タイムアウトした場合、またはすべてのフィルター ポイントが最後のファイルであるかどうかを確認するように設定した場合、@Aggregator イベントが発生しません。

ありがとう!

4

1 に答える 1

0

Split-filter-aggregate パターンに対する正解は、アグリゲーター Bean に次のプロパティを設定することでした。

send-partial-result-on-expiry="true"
group-timeout="5000"

これら 2 つのプロパティは連携して、最後のレコードがフィルター処理されたため、最後のレコードで ReleaseStrategy が呼び出されないという、説明した状況とまったく同じ状況を処理します。これらの設定により、タイムアウトに達するとキューに入れられたものはすべて解放されます。

タイムアウトは「休止期間」です。指定された CorrelationStrategy のメッセージがタイムアウト内に受信されない場合、集約は解放されます。メッセージを受信するたびに、タイムアウトがリセットされます。セクション (21) を参照してください: http://docs.spring.io/spring-integration/reference/htmlsingle/

于 2016-09-13T18:56:57.493 に答える