2017-01-19 9 views
0

The default flush interval is 30000。なぜそれをスケジュールする前にFileWritingMessageHandler divide this interval by 3の開始メソッドは何ですか?FileWritingMessageHandlerのAPPEND_NO_FLUSHはどのように機能しますか?

次のストリームを作成して、spring-cloud-dataflowプロジェクトでフラッシュをテストしようとしました: '時刻| file --mode = APPEND_NO_FLUSH --directory = test '

期待される結果:30秒後にファイルに書かれた30のメッセージを参照してください。

実際の結果:0件のメッセージがファイルに書き込まれます。

答えて

1

間隔よりも頻繁に実行されるようにフラッシャーをスケジュールする必要があります。それ以外の場合は、00:00:30にチェックすると、フラッシュは間隔の2倍(00:00:01にレコードを書き込むとします)ファイルは00:01:00までフラッシュされません)。

インターバル/ 3でフラッシャーを実行すると、実際のインターバルは3〜4回の実行の間になります。

30秒間隔では、実際の間隔は30〜40秒の間と平均で35秒です。

もっと正確にするために、フラッシャーをもっと頻繁に実行する必要があります。

javaドキュメントでアルゴリズムを明確にする必要があります。

EDIT

08:44:01.578 [メイン] DEBUG osichannel.DirectChannel - postSendチャンネル '入力' 上(= trueの送信)、メッセージ:GenericMessage [ペイロード=これは別の試験であり、ヘッダー= {タイムスタンプ= 1484919841573、ID = ac106489-73ad-da18-791d-3d0ec515c567、DIR =発現}]

08:44:41.509 [タスクスケジューラ-3]デバッグosifile.FileWritingMessageHandler - フラッシュさ:/ VAR /folders/rl/6ys7s69j2tqcjyvy8thdsd7m0000gp/T/dataflow-tests/expression/this.out

+0

これは既に[リファレンスマニュアル](http://docs.spring.io/spring-integration/reference/html/files.html#file-flushing)で説明されています。 'flushInterval - ファイルが書き込まれていない場合この期間は、自動的にフラッシュされます。これはおおよそのものであり、今度は1.33倍までになる可能性があります。 ' –

+0

感謝します。したがって、次のストリームで30〜40秒ごとにファイルにメッセージをフラッシュしたい場合は、 'time | file --mode = APPEND_NO_FLUSH --directory = test 'カスタムFlushPredicateを記述する必要はありますか? – aturkovic

+0

いいえ。あなたは述語は必要ありません。 DEBUGロギングをオンにすると、フラッシュが表示されます - 私の答えに編集を参照してください。 –

関連する問題