gpt4 book ai didi

基于 Redis 的 Java 作业调度程序?

转载 作者:IT王子 更新时间:2023-10-29 06:04:27 25 4
gpt4 key购买 nike

我希望在我们的项目中取代 Quartz 作为作业调度程序。我们已经使用具有集群支持的 Redis 作为分布式缓存层,我们认为也许我们也可以使用 Redis 进行作业调度。有没有人使用 Redis 在 Java 中实现作业调度?我搜索但找不到用于此目的的图书馆。所以我开始认为这可能不是一个流行的解决方案?

最佳答案

看看Redisson .它允许使用简单的 ScheduledExecutorService 来安排和执行任务(支持 cron 表达式) api和基于Redis队列。

这是一个例子。首先使用java.lang.Runnable 接口(interface)定义一个任务。每个任务可以访问Redis通过注入(inject)的 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);
}

}

提交给基于 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());

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));

所有任务分布在 Redisson nodes 上.您可以根据需要运行这些节点。

关于基于 Redis 的 Java 作业调度程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36221606/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com