テラコッタの人には不公平ですが、クラスタ環境でスケジュールされたジョブを使用するにはHazelcastを使用しようとした人がいますか?Hazelcastスケジュールされたジョブ(クォーツのサポート?)
- 一つだけのサーバを確保するためのグローバルHazelcastロックはクォーツの設定をスタートアップあります
私がイメージすることができ、最も単純な実装では、次のアーキテクチャです。
- 実際のタスクをDistributedTaskとして実行します。 (これは後で実行することができますが、忙しいスケジュールされたタスクはDistributedTaskのトリガーを処理する必要があります)
- ロックを保持するサーバーが停止すると、別のサーバーがロックを取得します。
これは、ヘイゼルキャストを既に持っている人にとって大きな利点になると思います。なぜなら、彼らは常にテラコッタのものを開くことによって開発者の環境の面倒を必要としないからです。
私は、ただ1つのノードをQuartzトリガの実行を担当する最も単純なソリューションをコーディングしました。私はCronのようなトリガを使用するだけなので、重いトリガタスクのためにDistributedTasksを作成する場合は、それは容認できる解決策になります。ここで
は、それが起こる作る私のorg.springframework.scheduling.quartz.SchedulerFactoryBean拡張子です:
@Override
public void start() throws SchedulingException {
new Thread(new Runnable() {
@Override
public void run() {
final Lock lock = getLock();
lock.lock();
log.warn("This node is the master Quartz");
SchedulerFactoryBean.super.start();
}
}).start();
log.info("Starting..");
}
@Override
public void destroy() throws SchedulerException {
super.destroy();
getLock().unlock();
}
してください、私はビッグとこれを行うことができる場合は何かが欠けていた場合、私に知らせてください。
githubに2つのファイルを追加しました。ここでRAMJobStore拡張子です:
そしてここでは、春SchedulerFactoryBean拡張子です:
Hazelcastに分散スケジュールされた実行を依頼する機能リクエストがあります:https://github.com/hazelcast/hazelcast/issues/115 – ccleve