Mil*_*hev 5 java job-scheduling redis
我希望在我们的项目中取代 Quartz 作为作业调度程序。我们已经使用具有集群支持的 Redis 作为分布式缓存层,我们认为也许我们也可以使用 Redis 进行作业调度。有没有人使用 Redis 在 Java 中实现作业调度?我为此进行了搜索,但找不到图书馆。所以我开始认为这可能不是一个流行的解决方案?
看看雷迪森。它允许使用简单的ScheduledExecutorService api 并基于 Redis 队列来调度和执行任务(使用 cron 表达式支持)。
这是一个例子。首先使用java.lang.Runnable接口定义一个任务。每个任务都可以通过注入的对象访问Redis实例RedissonClient。
public class RunnableTask implements Runnable {
@RInject
private RedissonClient redissonClient;
@Override
public void run() throws Exception {
RMap<String, Integer> map = redissonClient.getMap("myMap");
Long result = 0;
for (Integer value : map.values()) {
result += value;
}
redissonClient.getTopic("myMapTopic").publish(result);
}
}
Run Code Online (Sandbox Code Playgroud)
提交给基于Redis的ExecutorService。
RScheduledExecutorService executorService = redisson.getExecutorService("myExecutor");
RScheduledFuture<?> future = executorService.schedule(new CallableTask(), 10, 20, TimeUnit.MINUTES);
future.get();
// or cancel it
future.cancel(true);
// cancel by taskId
executorService.cancelTask(future.getTaskId());
Run Code Online (Sandbox Code Playgroud)
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));
Run Code Online (Sandbox Code Playgroud)
所有任务都分布在Redisson 节点上。您可以根据需要运行这些节点。
RedisJobStore 使用 Redis 进行持久存储的 Quartz Scheduler JobStore。
我们将不胜感激您的任何反馈:)