Zeus-Master-周期性调度策略实现

上文提到Zeus使用了开源的quartz来帮助其实现定时调度,但是展示给用的api有两种,一种就是quartz原生的类似cron表达式的设置,还有一种是每小时,每天这种设置,但是后台实现均是转换成quartz的api实现。

来看源码:

CronTrigger trigger = new CronTrigger(jd.getId(), "zeus",
      jd.getCronExpression());
detail = new JobDetail(jd.getId(), "zeus", TimerJob.class);
detail.getJobDataMap().put("jobId", jd.getId());
detail.getJobDataMap().put("dispatcher",
      context.getDispatcher());
context.getScheduler().scheduleJob(detail, trigger);

对于quartz不熟悉的同学可以 查看quartz的官网文档。

quartz中api需要一个 CronTrigger 触发器用来定时,还需要job来执行。Zeus写了一个通用的job,每个触发器都触发相同的任务,不同的是JobDetail内设置了需要触发的不同宙斯任务,以及分发任务的事件dispatcher;

public static class TimerJob implements Job {
   @Override
   public void execute(JobExecutionContext context)
         throws JobExecutionException {
      String jobId = context.getJobDetail().getJobDataMap()
            .getString("jobId");
      Dispatcher dispatcher = (Dispatcher) context.getJobDetail()
            .getJobDataMap().get("dispatcher");
      ScheduleTriggerEvent ste = new ScheduleTriggerEvent(jobId);
      dispatcher.forwardEvent(ste);
   }
}

你可能感兴趣的:(Zeus-Master-周期性调度策略实现)