使用Redis的Java/Scala中的持久调度作业

使用Redis的Java/Scala中的持久调度作业,java,scala,redis,playframework-2.0,Java,Scala,Redis,Playframework 2.0,Akka调度程序很棒,但缺乏持久性 有什么好的持久性作业调度解决方案吗?最好是Redis。我知道的最好的调度程序之一,我们目前正在使用的是。Java是用Java编写的,但我们在Scala项目中与Akka一起使用Java Quartz是一个很好的调度选项,并具有可用于持久化的Jobstore API。这是一个很好的读物,我最近编写了一个小Java库,用于处理使用Redis作为后端的分布式任务调度: 它非常简单,但应该允许您快速开始。它本身不会持久保存您的工作数据,但会在正确的时间触发您的工作。此外

Akka调度程序很棒,但缺乏持久性


有什么好的持久性作业调度解决方案吗?最好是Redis。

我知道的最好的调度程序之一,我们目前正在使用的是。Java是用Java编写的,但我们在Scala项目中与Akka一起使用Java Quartz是一个很好的调度选项,并具有可用于持久化的Jobstore API。这是一个很好的读物,我最近编写了一个小Java库,用于处理使用Redis作为后端的分布式任务调度:

它非常简单,但应该允许您快速开始。它本身不会持久保存您的工作数据,但会在正确的时间触发您的工作。此外,如果您有多个应用程序实例,作业将在单个实例上执行。

我们已经成功地使用Java一段时间了,最近添加了一个实例


免责声明:我参与了redis quartz的设计。到目前为止仍然是beta版。

我知道你的问题是关于Redis的,但我刚刚遇到Akka,我认为这会很有用


您可以持久使用Akka的调度程序。

我建议您试试。它允许使用普通的
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);

@om nom nom正如杰米·艾伦(Jamie Allen)在他的《耐用邮箱》中所说,在许多情况下,耐用邮箱不是一个好的解决方案。谢谢,我会试试。使用任何辅助程序库?Quartz可以与akka调度器集成吗?Cron风格有点奇怪,不适合类型:(@weakwire如果你想要一些用于quartz的Scala DSL,我没有找到。至于helper LIB,我们使用mongo,因此有一个更简单的mongo-quartz通信。你可以在使用Akka和quartz时查看此示例。至于调度程序集成,你可以使用Akka的一个用于一些内部任务,但它不能取代quartz co.的quartz调度程序完全地
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));