gpt4 book ai didi

java - Hazelcast 预定作业(支持 Quartz?)

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:12:18 37 4
gpt4 key购买 nike

我知道这对 terracotta 家伙不公平,但是有没有人尝试使用 Hazelcast 以便在集群环境中使用预定作业?

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

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

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

目前我编写了最简单的解决方案,即只让一个节点负责执行 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。这是 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

最佳答案

我前段时间也在思考同样的概念。实际上,您可以通过实现 JobStore SPI 接口(interface)轻松地将 Hazelcastquartz-scheduler 集成。查看RAMJobStore引用如何基于内存数据结构和 JobStoreTX 实现作业存储- 集群化、数据库支持的存储。

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

如果您能分享您的实现(GitHub?),那就太棒了,我想对于很多人来说,这将是 Terracotta 集群的可行替代方案。

关于java - Hazelcast 预定作业(支持 Quartz?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11129896/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com