Hazelcast预定工作(Quartz支持?)

Raf*_*hes 7 java spring terracotta quartz-scheduler hazelcast

我知道这对兵马俑来说是不公平的,但有没有人试图使用Hazelcast来在集群环境中使用预定的工作?

我可以成像的最简单的实现是以下架构:

  1. 全局Hazelcast锁定,用于确保只有一台服务器启动Quartz配置.
  2. 将实际任务作为DistributedTask运行.(这可以在以后完成,目前繁重的计划任务需要负责触发DistributedTask)
  3. 一旦持有锁的服务器关闭,另一台服务器就会获得锁.

我相信对于那些已经拥有Hazelcast的人来说,这将是一个很大的优势,因为他们不会因为一直打开兵马俑而需要整个开发环境的麻烦.

目前我编写了最简单的解决方案,只需要一个节点来负责执行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();
}
Run Code Online (Sandbox Code Playgroud)

请告诉我,如果我错过了一些大事,如果可以的话.

我已将这两个文件添加到github.这是RAMJobStore扩展:

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

这是Spring SchedulerFactoryBean扩展:

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

Tom*_*icz 9

前段时间我正在考虑相同的概念.实际上,你可以整合Hazelcastquartz-scheduler通过实现轻松JobStoreSPI接口.查看RAMJobStore有关如何基于内存数据结构实现作业存储的参考,以及JobStoreTX- 集群,数据库支持的存储.

这个界面非常大,但它应该是从RAM或Terracotta切换到Hazelcast所需的唯一地方.后一个库已经提供了分布式存储和锁定,所以它应该是相当简单的.

如果你可以分享你的实现(GitHub?)会很棒,猜测它对许多人来说是一个可行的替代Terracotta集群.