2016-09-12 11 views
0

大規模な入力ファイルが多数の個々のファイルにバーストされ、Spring統合アグリゲータを使用して集約されるSpring統合プロジェクトがあります。最後のレコードフィルタを使用した場合のSpring統合アグリゲータ

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

処理される最後の個々のファイルが、私たちのReleaseStrategyに当たる前にフィルタリングされるとどうなりますか?最後の個々のファイルがフィルタリングされていれば、私は再びポーリングされませんが、Springがこのユースケースを予期していて、まだ提供していない非ハッキリの準備をしていると期待しています@Aggregatorイベントで私に会いましょう。タイムアウトした場合、またはすべてのフィルタポイントをチェックして最後のファイルであるかどうかを確認する場合は、@ Agregatorイベントは発生しません。

ありがとうございます!

+0

私たちは、イベントの順序に応じて、テスト用薄片を確認している、我々はこの問題を回避する必要があります。私は、アグリゲータの場合と同じように、ReleaseStrategyがその時点までのメッセージの完全なリストを受け取ることがわかります。私たちのアグリゲータはReleaseStrategysoアグリゲータに私達ができる偽のコールへの最後のパラメータを覚えて、状態を保持する必要があるとしています。 I私はまだ誰かが春を考え出すことを願って保持するよう質問への答えとしてこれをマークしません。これを行うには「正しい方法」を承認したが、凝集にフィルタリングを組み合わせたとき、私はそれが春の統合アーキテクチャの穴である疑いがあります。 – DavesPlanet

答えて

0

スプリットフィルタ集約パターンに対する正解はアグリゲータBeanの次のプロパティを設定することでした。

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

この2つのプロパティは、まさに最後のレコードを濾過したため、当社のReleaseStrategyが最後のレコードで呼び出されることはありません説明したもの、のような状況に対処するために一緒に働きます。これらの設定では、タイムアウトに達すると、キューに入れられたものはすべて解放されます。

タイムアウトが「沈黙期間」で、与えられたCorrelationStrategyのためのメッセージは、タイムアウト時間内に集約リリースを受信されない場合。受信した各メッセージはタイムアウトをリセットします。参照してください(21): http://docs.spring.io/spring-integration/reference/htmlsingle/

関連する問題