基础
需要的基础:
1.zookeeper入门:https://zookeeper.apache.org/doc/r3.6.0/zookeeperStarted.html
2.curator入门:https://curator.apache.org/getting-started.html
3.Quartz入门:http://www.quartz-scheduler.org/documentation/quartz-2.3.0/quick-start.html
4.Elastic-Job入门(中文):http://elasticjob.io/docs/elastic-job-lite/00-overview/
5.Elastic-Job还用到guava和lombok,不过不了解也不影响阅读
6.最好能装个可视化工具,如zooinspector(https://github.com/apache/zookeeper/tree/master/zookeeper-contrib/zookeeper-contrib-zooinspector);或者zkui(https://github.com/DeemOpen/zkui)【zooinspector我电脑编译jar文件后,swing的图形界面显示一直有问题,尝试过各版本都有问题,jar包在maven中央仓库也有提供,如果还是想用zooinspector,可以看下(https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper-contrib-zooinspector)】
Demo
Demo:https://github.com/creasylai19/zookeeperdemo/tree/elastic_job_demo
demo只有两个class
MainClass
public class MainClass {
private static final Logger logger = Logger.getLogger(MainClass.class);
public static void main(String[] args) {
new JobScheduler(createRegistryCenter(), createJobConfiguration()).init();
}
private static CoordinatorRegistryCenter createRegistryCenter() {
CoordinatorRegistryCenter regCenter = new ZookeeperRegistryCenter(new ZookeeperConfiguration("127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183", "elastic-job-demo"));
regCenter.init();
return regCenter;
}
private static LiteJobConfiguration createJobConfiguration() {
// 定义作业核心配置,任务分为10片,每片有不同的参数对应不同业务逻辑
JobCoreConfiguration simpleCoreConfig = JobCoreConfiguration
.newBuilder("demoSimpleJob", "0/15 * * * * ?", 10)
.shardingItemParameters("0=A,1=B,2=C,3=D,4=E,5=F,6=G,7=H,8=I,9=J")
.build();
// 定义SIMPLE类型配置
SimpleJobConfiguration simpleJobConfig = new SimpleJobConfiguration(simpleCoreConfig, MyElasticJob.class.getCanonicalName());
// 定义Lite作业根配置
LiteJobConfiguration simpleJobRootConfig = LiteJobConfiguration.newBuilder(simpleJobConfig).build();
return simpleJobRootConfig;
}
}
任务MyElasticJob
public class MyElasticJob implements SimpleJob {
private static final Logger logger = Logger.getLogger(MyElasticJob.class);
@Override
public void execute(ShardingContext context) {
logger.debug(ManagementFactory.getRuntimeMXBean().getName()+":"+context.getShardingItem()+":"+context.getJobName()+":"+context.getJobParameter()+":"+context.getShardingParameter());
switch (context.getShardingItem()) {
case 0:
break;
case 1:
break;
case 2:
break;
default:
}
}
}
运行结果(开启了两个实例,每个实例各运行5个分片,默认的分配策略是平均分配)
实例1:
实例2:
zookeeper中的节点信息:
instances节点:作业运行实例信息,子节点是当前作业运行实例的主键