我知道这对terracotta的人来说是不公平的,但是有人尝试过使用Hazelcast在集群环境中使用计划作业吗?
我能想象到的最简单的实现是以下架构:
我相信对于已经拥有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
我前段时间也在想同样的概念。你实际上可以通过实现JobStore
SPI接口轻松地将Hazelcast
与石英调度器
集成在一起。关于如何实现基于内存数据结构的作业存储和JobStoreTX
-集群的、数据库支持的存储,请查看RAMJobStore
以供参考。
这个接口相当大,但它应该是从RAM或Terracotta切换到Hazelcast所需的唯一位置。后一个库已经提供了分布式存储和锁,所以应该非常简单。
如果你能分享你的实现(GitHub?),对于许多人来说,这可能是兵马俑集群的可行替代品。
从< code>3.8版开始,您可以简单地使用分布式< code >预定执行器服务:
scheduleonmember()
scheduleOnKeyOwner()
计划所有会员()
计划所有会员()
有关更多详细信息,请参阅计划执行器服务和IScheduledExecutorService
。