2

複数の Web サーバーがあり、Quartz を使用する必要があります。Quartz のクラスタリング機能は理想的ですが、サーバーのクロックが完全に同期している必要があります。彼らはこれについて非常に恐ろしい警告を発しています:

非常に定期的に実行される何らかの形式の時刻同期サービス (デーモン) を使用してクロックが同期されていない限り (クロックは互いに 1 秒以内である必要があります)、別々のマシンでクラスタリングを実行しないでください。

完全なクロック同期を保証することはできないため、クラスタリング機能を使用する代わりに、単一の Quartz インスタンス (フェイルオーバー用のスタンバイ付き) を使用することを考えていました。単一のインスタンスでジョブを実行することは問題ではありませんが、ジョブをスケジュールするにはすべての Web サーバーが必要です。

Web サーバーから JDBCJobStore にジョブを直接追加できますか? また、それらは (非クラスター化) Quartz サーバーによって取得されますか? これを行うには、Web サーバーにスケジュール インスタンスを作成してジョブを追加します。これらのインスタンスは開始されることはなく、JobStore へのアクセスに使用されるだけです。

4

1 に答える 1

2

「実際の」スケジューラー (これも非クラスター化) と同じ JobStore を使用して「非クラスター化」Quartz スケジューラーを作成し、ジョブをスケジュールするテスト プログラムを作成しました。数秒後、これらのジョブが実行されるので、機能しているように見えます。

更新:この質問を Quartz フォーラムにクロス投稿したところ、これでうまくいくという回答が得られました関連する質問で、彼らは次のように述べています

ジョブは、次の方法で別のプロセスによってそのデータベースに挿入できます。

1- 別のプロセスから Quartz の rmi 機能を使用し、Quartz API を使用する

2- 別のプロセス (webapp など) 内でスケジューラをインスタンス化し、同じデータベースを指すようにしますが、そのスケジューラ インスタンスを start() しません。また、クォーツ API を使用してジョブをスケジュールします。

于 2009-11-23T07:02:30.847 に答える