2017-09-14 9 views
0

私はSpring Integrationを使ってファイル解析システムを開発しています。Spring Integration:散布図パターンの実装

次は、 ポーラーがディレクトリからファイルをピックアップした後、いくつかの変換、解析などを適用します。最後に、2つのソース(mongoDBとFile System)にデータを格納し、元のファイル。

私はスキャターギャザーパターンを使用して、ストレージ操作を並行して実行しています。

質問:グループを自動的に解除するにはどうすればよいですか?集計された結果を最終ハンドラにルーティングしますか?ここで

はコードの例です:

@Bean 
public IntegrationFlow processDomainFileFlow() { 
    return IntegrationFlows 
      .from("receiverChannel") 
      .scatterGather(scatterer -> scatterer 
           .recipientFlow(m -> true, subFlow -> subFlow.handle(new DataToMongoHandler())) 
           .recipientFlow(m -> true, subFlow -> subFlow.handle(new DataToFileStorageHandler())), 
         gatherer -> gatherer 
           .releaseStrategy(group -> group.size() == 2), 
        scatterGatherSpec -> scatterGatherSpec 
          .gatherChannel(MessageChannels.direct("gateway").get())) 
      .get(); 
} 

、ここでは、最終的なハンドラです:

@Bean 
public IntegrationFlow gatewayFlow(){ 
    return IntegrationFlows.from("gateway") 
      .handle(new DeleteOriginalFileHandler()) 
      .get(); 
} 

答えて

0

は、サイズが2のとき基を放出するように構成し、aggregator()を追加します。成功後にサブフローを変更してアグリゲータにメッセージを送信します。

+0

ねえ、入力していただきありがとうございます。私はその原則を理解していますが、詳細を理解することはできません。スキャッターギャザーメソッドを使用して質問を更新しました。リリース戦略はそのままでは機能しません。私の両方のハンドラーは無効です。手動でヘッダーを作成する必要がありますか?また、集計結果を最終的なハンドラにリダイレクトする方法もわかりません。 –

+0

ハンドラはvoidを返すので、結果を生成するための他のメカニズムが必要です。サブフローに2つのpub/subチャネルを追加し、2つ目のサブスクライバは結果を返します。ハンドラが失敗すると、2番目のサブスクライバは呼び出されません(デフォルト)。アグリゲータ(Gatherer)にタイムアウトを追加できます。 –