本文主要介绍关于当当开源的 分布式任务调度框架 elastic-job 的使用。
docker pull zookeeper
docker run --name zookeeper_node1 -p 2181:2181 -d zookeeper
3. 进入到 container 环境中
docker exec -it zookeeper_node1 bash
进入到 bin 下,运行 zkCli.sh 就可以连接到 zookeeper 了。
接下来我们使用 springboot 整合 elastic-job
org.springframework.boot
spring-boot-starter-parent
2.1.2.RELEASE
com.dangdang
elastic-job-lite-core
2.1.5
com.dangdang
elastic-job-lite-spring
2.1.5
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter
@ImportResource(value = { "classpath:application-job-config.xml" })
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class);
}
}
任务: 这里我们写了两个任务,一个五秒执行一次,一个十秒执行一次。
public class ExeJobA implements SimpleJob {
@Override
public void execute(ShardingContext arg0) {
System.out.println("JOB A is execute .");
}
}
public class ExeJobB implements SimpleJob {
@Override
public void execute(ShardingContext arg0) {
System.out.println("JOB B is execute .");
}
}
看一下 zookeeper 中的节点信息
进入到容器的 bash 中,并连接 zookeeper
> ls /
[elasticJobDemo, zookeeper]
可以看到起节点中有 elasticJobDemo,也就是我们配置文件当中的命名空间 namespace,打开这个节点看一下
> ls /elasticJobDemo
[jobA, jobB]
其下包含了我们注册的两个任务,点来其中一个看一下。
> ls /elasticJobDemo/jobB
[config, instances, leader, servers, sharding]
config 任节点中存储了任务节点的配置信息,instance 包含了执行的实例信息, leader 中包含了选举那个节点执行了任务,servers 中包含注册这个任务的机器节点,sharding 中也包含具体实例信息。
挨个看一下
> get /elasticJobDemo/jobB/config
{"jobName":"jobB","jobClass":"com.beng.job.ExeJobB","jobType":"SIMPLE","cron":"0/5 * * * * ? *","shardingTotalCount":1,"shardingItemParameters":"","jobParameter":"","failover":false,"misfire":true,"description":"","jobProperties":{"job_exception_handler":"com.dangdang.ddframe.job.executor.handler.impl.DefaultJobExceptionHandler","executor_service_handler":"com.dangdang.ddframe.job.executor.handler.impl.DefaultExecutorServiceHandler"},"monitorExecution":true,"maxTimeDiffSeconds":-1,"monitorPort":-1,"jobShardingStrategyClass":"","reconcileIntervalMinutes":10,"disabled":false,"overwrite":false}
> ls /elasticJobDemo/jobB/instances
[192.168.0.110@-@76563]
> get /elasticJobDemo/jobB/instances/192.168.0.110@-@76563
[]
> ls /elasticJobDemo/jobB/leader
[election, sharding]
> get /elasticJobDemo/jobB/leader/election/instance
192.168.0.110@-@76563
> ls /elasticJobDemo/jobB/servers
[192.168.0.111, 192.168.0.110]
> get /elasticJobDemo/jobB/sharding/0/instance
192.168.0.110@-@76563
当当同时还开源对于 elastic-job 的可视化界面。
首先将 elastic-job-lite-console 代码 download 到本地进行编译打包。
github:https://github.com/elasticjob/elastic-job-lite
进入到 /elastic-job-lite-dev/elastic-job-lite-console/target 目录下:
将这个包进行解压:
其中提供了 windows 和 linux 两个环境的脚本,我使用的 linux 环境,运行 start.sh
> ./start.sh
[INFO ] 2019-07-24 22:39:38,757 --main-- [io.elasticjob.lite.lifecycle.restful.RestfulServer] Elastic Job: Start RESTful server
[INFO ] 2019-07-24 22:39:38,777 --main-- [org.eclipse.jetty.server.Server] jetty-8.1.19.v20160209
[INFO ] 2019-07-24 22:39:38,956 --main-- [org.eclipse.jetty.server.AbstractConnector] Started [email protected]:8899
运行成功,访问 http://localhost:8899,默认登录名和密码均是 root
可以看到我连接到了我的 zookeeper 上,并且我注册的两个定时任务也有。