Zeus-Master-週期性排程策略實現

weixin_34353714發表於2016-07-07

上文提到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);
   }
}

相關文章