Я знаю, что это несправедливо по отношению к терракотовым ребятам, но пробовал ли кто-нибудь использовать Hazelcast для выполнения запланированных заданий в кластерной среде?
Самая простая реализация, которую я могу себе представить, представляет собой следующую архитектуру:
Я считаю, что это было бы большим преимуществом для людей, у которых уже есть 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();
}
Пожалуйста, дайте мне знать, если я упустил что-то важное и можно ли это сделать.
Я добавил два файла на github. Вот расширение RAMJobStore:
А вот расширение Spring SchedulerFactoryBean: