elastic-job、elastic-job-lite-console 的使用
前言
本文主要介绍关于当当开源的 分布式任务调度框架 elastic-job 的使用。
环境
- zookeeper
- java8
- docker
我们使用 docker 运行 zookeeper。
- 使用 docker 拉取 zookeeper 镜像
docker pull zookeeper
- 构建 container
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
pom 依赖
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.2.RELEASE</version> <relativePath /> </parent> <dependencies> <dependency> <groupId>com.dangdang</groupId> <artifactId>elastic-job-lite-core</artifactId> <version>2.1.5</version> </dependency> <dependency> <groupId>com.dangdang</groupId> <artifactId>elastic-job-lite-spring</artifactId> <version>2.1.5</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> </dependencies>
application-job-config.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:reg="http://www.dangdang.com/schema/ddframe/reg" xmlns:job="http://www.dangdang.com/schema/ddframe/job" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.dangdang.com/schema/ddframe/reg http://www.dangdang.com/schema/ddframe/reg/reg.xsd http://www.dangdang.com/schema/ddframe/job http://www.dangdang.com/schema/ddframe/job/job.xsd "> <reg:zookeeper id="jobRegister" server-lists="localhost:2181" namespace="elasticJobDemo" base-sleep-time-milliseconds="1000" max-sleep-time-milliseconds="3000" max-retries="3" /> <job:simple id="jobA" class="com.beng.job.ExeJobA" registry-center-ref="jobRegister" cron="0/10 * * * * ? *" sharding-total-count="1" /> <job:simple id="jobB" class="com.beng.job.ExeJobB" registry-center-ref="jobRegister" cron="0/5 * * * * ? *" sharding-total-count="1" /> </beans>
启动类
@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-lite-console
当当同时还开源对于 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 SelectChannelConnector@0.0.0.0:8899
运行成功,访问 http://localhost:8899,默认登录名和密码均是 root
可以看到我连接到了我的 zookeeper 上,并且我注册的两个定时任务也有。
到此就完成了。
- elastic-job(lite)使用的一些注意事项
- elastic-job的elastic-job-lite-console部署
- Elastic-Job-Lite的原理简介和使用(推荐)
- 分库分表框架Sharding-jdbc以及分布式worker:Elastic-job的使用与踩坑
- [置顶] Elastic-Job-Lite 源码阅读 ---- 作业执行
- SpringBoot使用Elastic-Job
- [置顶] elastic job (一) elastic-job-lite----SimpleJob
- paascloud开源项目学习(4) -- 项目中分布式定时任务框架 Elastic-Job 的使用
- 记录:使用Elastic-Job遇到的坑
- elastic-lite-job service节点
- elastic-job的原理简介和使用
- Elastic-Job-Lite实现原理
- 房价网是怎么使用分布式作业框架elastic-job
- elastic-job的原理简介和使用
- Elastic-Job快速使用
- elastic-lite-job配置信息
- elastic-job开源框架使用中遇到的 架包冲突错误
- elastic-job-Lite入门
- elastic-job+zookeeper实现分布式定时任务调度的使用(springboot版本)
- Elastic-Job-Lite分析——作业调度器 JobScheduler 的创建过程