0

私は分散サービスを作成しており、時間のかかる一連の操作を、任意の時点ですべての JVM で単一の実行スレッドに制限することを検討しています。(最大 3 つの JVM を処理する必要があります)。

私の最初の調査では、 java.util.concurrent.Executors 、 java.util.concurrent.Semaphore. シングルトン パターンと Executor または Semaphore を使用しても、複数の JVM で単一の実行スレッドが保証されるわけではありません。

タスクを達成するために使用できる Java コア API (または少なくともパターン) を探しています。

PS: 他に選択肢がない場合にのみ、複数の JVM マシンで単一の実行スレッドを実現するために使用する予定だった既存のプロジェクト内で ActiveMQ にアクセスできます。

4

1 に答える 1

2

コア Java API を使用してこれを解決する簡単な方法はありません。3 つの JVM が共有ファイル システムにアクセスできる場合、それを使用して JVM 全体の状態を追跡できます。

したがって、基本的には、高価な操作を開始するときにロックファイルを作成し、最後に削除するようなことを行います. そして、操作を開始する前に、各 JVM でこのロック ファイルの存在を確認します。ただし、このアプローチには、高価な操作の途中で JVM が停止し、ファイルが削除されない場合など、いくつかの問題があります。

ZooKeeperは、このような問題やその他のクロスプロセス同期の問題に対する優れたソリューションです。その可能性があるかどうかを確認してください。JMS キューのような問題を解決するには、JMS キューよりもはるかに自然な方法だと思います。

于 2013-04-01T16:55:29.590 に答える