2012-06-21 14 views
6

Terrakotta adamlarla haksızlık ettiğini biliyorum, ancak kümelenmiş bir ortamda planlanan işleri kullanmak için herkes Hazelcast'i kullanmaya çalıştı mı?Hazelcast planlanan işler (Quartz desteği?)

  1. tek sunucusağlanması için küresel Hazelcast kilidi Kuvars yapılandırma başlangıç ​​vardır:

    Ben görüntü can en basit uygulama aşağıdaki mimarisidir.

  2. Gerçek görevleri DistributedTask olarak çalıştırmak. (Bu daha sonra yapılabilir, şu an için planlanan görevler, tetiklenen DistributedTask'ın sorumluluğunu üstlenmeye ihtiyaç duyacaktır)
  3. Kilit tutan sunucu en kısa sürede, başka bir sunucu kilidi alır.

Bunun, Hazelcast'e sahip olan insanlar için büyük bir avantaj olacağına inanıyorum; çünkü bu, her zaman pişmiş toprak şeyleri açarak tüm devasa çevre sorunlarına ihtiyaç duymayacaklar.

Şu an için Quartz tetikleyicileri yürütmekle görevli olan tek bir düğümün yapılmasının en basit çözümünü kodladım. Sadece Cron benzeri tetikleyiciler kullandığım için ağır tetikleme görevleri için DistributedTasks oluşturmayla ilgilenirseniz kabul edilebilir bir çözüm olabilir.

@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(); 
} 

, bu yapılabilir eğer bana büyük bir şey eksik olmadığını bilmek ve bildirin:

İşte olmasını sağlıyor benim org.springframework.scheduling.quartz.SchedulerFactoryBean uzantısıdır.

İki dosyayı github'a ekledim.

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

Ve burada Bahar SchedulerFactoryBean uzantısı: İşte RAMJobStore uzantısı

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

+1

FYI, yayınlanmış dağıtılmış zamanlamaları infaz etmek için bir özellik isteği var: https://github.com/hazelcast/hazelcast/issues/115 – ccleve

cevap

8

Bir süre önce aynı kavram düşünüyordum. JobStore SPI arabirimini uygulayarak 'u quartz-scheduler ile kolayca bütünleştirebilirsiniz. Bellek içi veri yapılarına ve JobStoreTX - kümelenmiş, veritabanı destekli depolamaya göre iş deposu nasıl uygulanacağı konusunda referans için RAMJobStore'a bakın.

Bu arabirim oldukça büyüktür, ancak RAM veya Terracotta'dan Hazelcast'e geçmek için gereken tek yer olmalıdır. İkinci kütüphane daha önceden dağıtılmış depolama ve kilitler sağlar, bu yüzden oldukça basit olmalıdır.

Uygulamanızı (GitHub?) Paylaşırsanız harika olurdu, sanırım birçok insan için Terracotta kümesine uygun bir alternatif olabilir.

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

bakınız:

+0

Merhaba Tomaz, En basit uygulama için github bağlantısıyla yazımı güncelledim. hiç düşünebilirdi. Lütfen kontrol et. –

3

sadece Scheduled Executor Service dağıtılan kullanabilirsiniz sürümü 3.8 ile başlayarak Daha fazla bilgi içinve IScheduledExecutorService.