2012-06-21 8 views
6

テラコッタの人には不公平ですが、クラスタ環境でスケジュールされたジョブを使用するにはHazelcastを使用しようとした人がいますか?Hazelcastスケジュールされたジョブ(クォーツのサポート?)

  1. 一つだけのサーバを確保するためのグローバルHazelcastロックはクォーツの設定をスタートアップあります

    私がイメージすることができ、最も単純な実装では、次のアーキテクチャです。

  2. 実際のタスクをDistributedTaskとして実行します。 (これは後で実行することができますが、忙しいスケジュールされたタスクはDistributedTaskのトリガーを処理する必要があります)
  3. ロックを保持するサーバーが停止すると、別のサーバーがロックを取得します。

これは、ヘイゼルキャストを既に持っている人にとって大きな利点になると思います。なぜなら、彼らは常にテラコッタのものを開くことによって開発者の環境の面倒を必要としないからです。

私は、ただ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拡張子です:

https://github.com/mufumbo/quartz-hazelcast/blob/master/src/main/java/com/mufumbo/server/scheduler/hazelcast/HazelcastRAMJobStore.java

そしてここでは、春SchedulerFactoryBean拡張子です:

https://github.com/mufumbo/quartz-hazelcast/blob/master/src/main/java/com/mufumbo/server/scheduler/hazelcast/SchedulerFactoryBean.java

+1

Hazelcastに分散スケジュールされた実行を依頼する機能リクエストがあります:https://github.com/hazelcast/hazelcast/issues/115 – ccleve

答えて

8

私はいくつかの時間前に同じコンセプトを考えていました。実際にHazelcastquartz-schedulerと統合するには、JobStore SPIインターフェイスを実装することが簡単です。メモリ内のデータ構造に基づいてジョブストアを実装する方法とクラスタ化されたデータベースバックアップストアJobStoreTXを参照するには、RAMJobStoreを参照してください。

このインターフェイスはかなり大きいですが、RAMまたはTerracottaからHazelcastに切り替えるために必要な唯一の場所である必要があります。後者のライブラリはすでに分散ストレージとロックを提供しているので、むしろ簡単です。

あなたの実装(GitHub?)を共有することができれば素晴らしいと思いますが、それは多くの人々にとってテラコッタクラスターの実行可能な代替手段になると思います。

  • scheduleOnMember()
  • scheduleOnKeyOwner()
  • scheduleOnAllMembers()
  • scheduleOnAllMembers()

を参照してください:

+0

こんにちはTomaz、私は最も簡単な実装へのgithubリンクで私の投稿を更新しました。考えることができた。チェックアウトしてください。 –

3

あなたは、単にScheduled Executor Serviceを分散使用することができますバージョン3.8から開始詳細については、およびIScheduledExecutorServiceを参照してください。

関連する問題