2

クラスター内の 2 つのノードにデプロイされたスプリング統合アプリがあります。単一のディレクトリ (インバウンド ファイル アダプター) で着信ファイルをポーリングします。ファイルがノードによって取得されて処理される場合、他のノードが同じファイルを取得しようとして、以下の例外をスローすることがあります。

エラー org.springframework.integration.handler.LoggingHandler - org.springframework.integration.MessageHandlingException: ファイルへのメッセージ ペイロードの書き込みに失敗しました ..... 原因: java.io.FileNotFoundException: /somedir/dir/file.txt (Noそのようなファイルまたはディレクトリ)

ポーリング/クラスタリングなどはどこでも議論されていることを私は知っています。これに関する正確な説明はどこでも見つかりました。私はこれを片付けて、ログをよりきれいに保とうとしています。よろしくお願いします。これを防ぐために、インバウンドファイルアダプターに簡単な構成はありますか?

4

1 に答える 1

2

1 つの解決策は、ディレクトリをポーリングする単一のソースを使用し、RabbitMQ、JMS などの中間トランスポートを使用して競合するコンシューマーに作業を配布することです。

もう 1 つは、を使用するFileSystemPersistentAcceptOnceFileListFilterを使用してConcurrentMetadataStore、インスタンスの 1 つだけが各ファイルを参照できるようにすることです。

これにはいくつかの共有状態が必要です。フレームワークはRedisMetadataStore組み込みオプションとして を提供します。

于 2014-08-23T13:58:16.793 に答える