apache commons vfs を使用して、ファイル システム上のディレクトリ X をリッスンする Java プロセスがあります。新しいファイルがこのディレクトリにエクスポートされるたびに、プロセスが開始されます。最初にファイルの名前を filename.processing に変更してファイル名を解析し、ファイルから情報を取得してテーブルに挿入してから、このファイルをドキュメント管理システムに送信します。 . これは、クラスターごとのシングルスレッド アプリケーションです。これをクラスタ環境で実行するとします。5 つのサーバーがあります。したがって、5 つの異なる VM が同じファイルにアクセスしようとしています。OS は複数のプロセスが同時にファイルを変更することを許可しないため、実装全体は、一度に 1 つのプロセスのみがファイルの名前を .processing に変更できることに基づいていました。クラスターがファイルを保持して名前を .processing に変更すると、他のクラスター'
これは 1 年以上前から問題なく機能していましたが、たった今、重複がほとんど見つかりませんでした。複数のクラスターがファイルを取得したようです。この場合、クラスター a、b、c がファイル f.pdf にアクセスし、同時に f.pdf.processing に名前を変更したとします (私はまだ困惑しています)。 OS がファイルを同時に変更できるようにする方法)。これらの結果として、クラスター a、b、c はファイルを処理し、文書管理システムに送信します。したがって、3 つの重複ファイルがあります。
つまり、私が見ているのは、クラスター環境でタスクを1回だけ実行するアプローチです。また、クラスターに問題が発生した場合に別のクラスターがタスクを引き継ぐように、フェイルオーバー メカニズムも備えたいと考えています。ボックスで master=true のような環境変数を設定したくありません。これは、1 つのクラスターのみに制限され、フェイルオーバーを処理しないためです。
どんな種類の助けも大歓迎です。