Elastic JOB 目录结构
一、Elastic-job整体的目录划分
zk
||---------elastic-job-cloud(xx_cloud.properties zk_namespacep配置)
||------- config
||------------/job(任务配置)
||------------/app(运行APP配置)
||---------/state(作业状态)
||--------ready(待运行)
||----------/disable/app(禁用应用队列节点路径.)
||----------/failover(待失效转移任务队列节点路径..)
||----------/running(执行中的作业节点)
二、Elastic-job app节点内容
APP节点内容,主要为APP name, cpu ,内存等情况
private final String appName;
private final String appURL;
private final String bootstrapScript;
private double cpuCount = 1;
private double memoryMB = 128;
private boolean appCacheEnable = true;
private int eventTraceSamplingCount;
三、Elastic-job 配置更新监听
使用CloudJobConfigurationListener完成配置节点的更新动作,主要原理是使用curator中的TreeCache并使用一个线程监听zk目录变化
getCache().getListenable().addListener(this, Executors.newSingleThreadExecutor());
四、定时作业的处理方式
在ES中使用标准的Quatz表达式,解析CONFIG/JOB下的作业(已经在加载在内存中),并触发写入到READY目录下去。(在作业存储结构上,TransientProducerRepository中定义了ConcurrentHashMap<JobKey, List<String>> cronTasks ,其中cron采用了cron表达式,为key作业为LIST的方式,减少了表达式的数量
private JobDetail buildJobDetail(final JobKey jobKey) {
JobDetail result =
JobBuilder.newJob(ProducerJob.class).withIdentity(jobKey).build();
result.getJobDataMap().put("repository", repository);
result.getJobDataMap().put("readyService", readyService);
return result;
}
ProducerJob.class 类中
@Setter
public static final class ProducerJob implements Job {
private TransientProducerRepository repository;
private ReadyService readyService;
@Override
public void execute(final JobExecutionContext context) throws
JobExecutionException {
List<String> jobNames = repository.get(context.getJobDetail().getKey());
for (String each : jobNames) {
readyService.addTransient(each);
}
}
}
猜你喜欢
转载自sunday1207.iteye.com/blog/2375528
今日推荐
周排行