Akka Scheduler很棒,但缺乏持久性。
有持久性的作业调度是否有任何好的解决方案?最好是Redis。
答案 0 :(得分:2)
我所知道的最佳调度程序之一是Quartz。用Java编写,但我们在Scala项目中与Akka一起使用
答案 1 :(得分:0)
Java Quartz是一个很好的调度选项,并且具有可用于持久性的Jobstore API。这是一个很好的阅读http://www.ibm.com/developerworks/java/library/j-quartz/
答案 2 :(得分:0)
这是我最近编写的一个小型Java库,用于处理使用Redis作为后端的分布式任务调度:https://github.com/davidmarquis/redis-scheduler
这很简单,但应该让你很快开始。它不会持久保存您的工作数据,但会在合适的时间触发您的工作。此外,如果您有多个应用程序实例,则将在单个实例上执行作业。
答案 3 :(得分:0)
我们已经成功使用Quartz和Java成功了一段时间,最近添加了redis backend。
免责声明:我参与了redis-quartz的设计。截至目前,redis-quartz仍处于测试阶段。
答案 4 :(得分:0)
我知道你的问题是关于Redis的,但我刚刚遇到了Akka-Scheduling的Akka,我觉得它会很有用。
您可以使用具有一定持久性的Akka调度程序。
答案 5 :(得分:0)
我建议你试试Redisson。它允许通常的java.lang.Runnable
和java.util.concurrent.Callable
接口。这是代码示例:
RScheduledExecutorService executorService = redisson.getExecutorService("myExecutor");
ScheduledFuture<?> future = executorService.schedule(new CallableTask(), 10, 20, TimeUnit.MINUTES);
future.get();
// or cancel it
future.cancel(true);
cron表达式的示例:
executorService.schedule(new RunnableTask(), CronSchedule.of("10 0/5 * * * ?"));
executorService.schedule(new RunnableTask(), CronSchedule.dailyAtHourAndMinute(10, 5));
executorService.schedule(new RunnableTask(), CronSchedule.weeklyOnDayAndHourAndMinute(12, 4, Calendar.MONDAY, Calendar.FRIDAY));