提问者:小点点

Hazelcast计划作业(石英支持?)


我知道这对terracotta的人来说是不公平的,但是有人尝试过使用Hazelcast在集群环境中使用计划作业吗?

我能想象到的最简单的实现是以下架构:

  1. 全局黑泽尔铸造锁,用于确保只有一台服务器启动了 Quartz 配置。
  2. 以分布式任务的形式运行实际任务。(这可以在以后完成,目前繁重的计划任务将需要处理触发分布式任务)
  3. 一旦持有锁的服务器关闭,另一台服务器就会获得锁。

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

目前,我已经编写了最简单的解决方案,只让一个节点负责执行Quartz触发器。由于我只使用类似Cron的触发器,如果我负责为繁重的触发器任务创建分布式任务,这可能是一个可以接受的解决方案。

下面是我的org . spring framework . 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中。下面是RAMJobStore扩展:

https://github . com/mufumbo/quartz-hazel cast/blob/master/src/main/Java/com/mufumbo/server/scheduler/hazel cast/hazelcastramjobstore . Java

这是Spring SchedulerFactoryBean扩展:

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


共2个答案

匿名用户

我前段时间也在想同样的概念。你实际上可以通过实现JobStoreSPI接口轻松地将Hazelcast石英调度器集成在一起。关于如何实现基于内存数据结构的作业存储和JobStoreTX-集群的、数据库支持的存储,请查看RAMJobStore以供参考。

这个接口相当大,但它应该是从RAM或Terracotta切换到Hazelcast所需的唯一位置。后一个库已经提供了分布式存储和锁,所以应该非常简单。

如果你能分享你的实现(GitHub?),对于许多人来说,这可能是兵马俑集群的可行替代品。

匿名用户

从< code>3.8版开始,您可以简单地使用分布式< code >预定执行器服务:

  • scheduleonmember()
  • scheduleOnKeyOwner()
  • 计划所有会员()
  • 计划所有会员()

有关更多详细信息,请参阅计划执行器服务和IScheduledExecutorService