4

Java EE アプリケーションのコンテキストで Quartz のクラスター化されたインスタンスを実行しています。Java EE アプリケーションの (ランダムに選択された) ノードの 1 つは、一連の Quartz ジョブを起動してすぐに実行します (この記事で説明されているように)。各ジョブをトリガーする直前に、そのジョブに関連付けられた JobListener がスケジューラの ListenerManager に追加されます。

Quartz の内部が正しく動作していることが理解できれば、各ジョブを実際に実行するノードは、使用可能なノードからランダムに選択されます。その場合、リスナーがジョブを実行したノードとは異なるノードで作成された場合、リスナーのメソッドをどのように呼び出すことができますか? ListenerManager のリスナーのリストはグローバルであり、クラスター内のすべてのノードで同じであると想定できますか? それとも、各ノードには、独自のリスナーを持つ独自の ListManager がありますか?

4

2 に答える 2

3

無料のオンライン ブックで、さらに役立つ情報を見つけました。

クラスタ環境でのグローバル リスナーの使用

クラスター化された環境では、引き続きジョブ リスナーとトリガー リスナーを使用できます。唯一の混乱は、どの Scheduler インスタンスがコールバック メソッドを受け取るかを理解しようとするときに発生します。

これを覚える最も簡単な方法は、ジョブまたはトリガーが実行される Scheduler インスタンスで Listener に通知されることです。ジョブとトリガーは単一のノードでのみ実行されるため、リスナーはそのノードで通知されます。

于 2019-08-08T07:04:17.190 に答える
2

Quartz のドキュメントによると:

リスナーは実行時にスケジューラーに登録され、ジョブおよびトリガーと一緒に JobStore には保管されません。これは、通常、リスナーがアプリケーションとの統合ポイントであるためです。したがって、アプリケーションを実行するたびに、リスナーをスケジューラーに再登録する必要があります。

http://quartz-scheduler.org/files/documentation/Quartz-2.1.x-Documentation.pdfを参照してください。

お役に立てれば

于 2014-02-12T12:21:26.947 に答える