2016-06-23 7 views
1

ディレクトリをポーリングするファイル受信チャネルアダプタを実装しました。他のインバウンドプロセスから複数のファイルを受け取ることができます。その中から、マージするいくつかの一意のファイルを選択する必要があります。このジョブを実行するためのカスタムフィルタを実装しました(一意のファイルを取得してサービスアクティベータに渡すため)。ファイルを取得できませんサービスアクティベータが処理します - ファイル受信チャネルアダプタ

サービスアクティベータでは、ファイルを1つずつ受信します。実際にフィルタクラスからの現在のポーリングでマージするファイルがいくつあっても、1つのファイルまたは複数のファイルしか存在しない可能性があります。

私の質問は、サービスアクティベータクラスで受信するファイルの数を確認する方法です。 Filterクラスから受け取ったファイルの数に基づいてビジネスを実行できるようにするには?

Serviceアクティベータクラスに、フィルタクラスからそのポーリングで受信するファイルの数を知る方法はありますか?

答えて

0

<poller>のようなオプションがありますが、いくつかの合理的な値を持つ、だから、

<xsd:attribute name="max-messages-per-poll" type="xsd:string"> 
     <xsd:annotation> 
      <xsd:documentation> 
       The maximum number of messages that will be produced for each poll. Defaults to 
       infinity (indicated by -1) for polling consumers, and 1 for polled 
       inbound channel adapters. 
      </xsd:documentation> 
     </xsd:annotation> 
    </xsd:attribute> 

を、あなたは一番上にあなたのサービスを制限します。 各メッセージを別々のスレッドに移動しない場合は、サービスにAtomicIntegerを数えて送信するだけです。そして、ポーリングタスクの最後に、次のポーリングで再度計算する準備ができるように、そのカウンタをリセットすることができます。この目的のためにresult == nullの場合にはAbstractMessageSourceAdviceafterReceive()リセットカウンターのように実装することができます。

はリファレンスマニュアルで詳細情報を参照してください:http://docs.spring.io/spring-integration/reference/html/messaging-channels-section.html#conditional-pollers

+0

おかげで助けを...聞いてアルテム – user2685868

+0

がうれしいです!あなたはすでに答えを受け入れることができますか? –

+0

実際には何か他の方法で...チャンネルアダプタとActivatorクラスの間にフィルタがあります。そのため、ファイルフィルタのようなプロパティを持つPOJOクラスを紹介します。次に、このプロパティをactivatorクラスから読み込みます。それでおしまい !!。しかし、あなたの提案をお寄せいただきありがとうございます。将来必要な場合は私もこれを実装しようとします。 – user2685868

関連する問題