1

私はこれに関する情報を見つけようとしてきましたが、Spring Integration フレームワークが未熟なため、あまり運がありませんでした。

これが私の希望するワークフローです:

  1. 新しいファイルは「Incoming」ディレクトリに配置されます

  2. ファイルは file:inbound-channel-adapter を使用して取得されます

  3. ファイルの内容は、一度に N 行ずつ「ステージ 1」チャネルにストリーミングされ、そこで行が中間 (共有) 表現に解析されます。

  4. この解析された行は、複数の「ステージ 2」チャネルにルーティングされます。

  5. 各「ステージ 2」チャネルは、利用可能な N 行に対して独自の処理を行い、それらを最終的な表現に変換します。このチャネルには、あるチャネルの処理が他のチャネルよりも大幅に遅くなった場合に、ステージ 2 チャネルが過負荷にならないようにするキューが必要です。

  6. N 行の最終表現がファイルに書き込まれます。手順 4 のルーティング先と同じ数の出力ファイルが存在します。

**上記の「N」は、[1、メモリに適切に収まるものは何でも]から一度に読み取る妥当な行数を表しますが、完全なファイルの行数よりも常に少ないことが保証されています。*

Spring Integration でストリーミング (ステップ 3、4、5)を達成するにはどうすればよいですか? ファイルをストリーミングせずに実行するのはかなり簡単ですが、ファイルが大きすぎて、ファイル全体をメモリに読み込むことができません。

補足として、Spring Integration を使用しないこのワークフローの実用的な実装がありますが、プロジェクトの他の場所で Spring Integration を使用しているため、ここで試して、それがどのように機能し、結果がどのようになるかを確認したいと思います。コードの長さと明瞭さを比較します。

4

1 に答える 1

1

これは非常に興味深いユースケースであり、長い間見逃してしまったことをお詫び申し上げます。のために問題を作成することは間違いなく価値があります。現時点では、Spring Integrationでファイルを取得し、それらへの参照を送信するためのサポートがあります。ファイルをbyte[]またはStringに変換するための基本的なサポートもあります。

答えは、カスタムJavaコードでステップ2を実行し、チャンクをステージ2チャネルに送信することです。メッセージペイロードとしてストリームへの参照を送信しないことをお勧めします。

于 2010-05-08T10:43:19.847 に答える