一、原理
elastic-job有lite版和cloud版,最大的区别是有无调度中心,笔者采用的是lite版本,无中心化。
tips:
-
第一台服务器上线触发主服务器选举。主服务器一旦下线,则重新触发选举,选举过程中阻塞,只有主服务器选举完成,才会执行其他任务。
-
某作业服务器上线时会自动将服务器信息注册到注册中心,下线时会自动更新服务器状态。
-
主节点选举,服务器上下线,分片总数变更均更新重新分片标记。
-
定时任务触发时,如需重新分片,则通过主服务器分片,分片过程中阻塞,分片结束后才可执行任务。如分片过程中主服务器下线,则先选举主服务器,再分片。
-
通过上一项说明可知,为了维持作业运行时的稳定性,运行过程中只会标记分片状态,不会重新分片。分片仅可能发生在下次任务触发前。
-
每次分片都会按服务器
IP
排序,保证分片结果不会产生较大波动。 -
实现失效转移功能,在某台服务器执行完毕后主动抓取未分配的分片,并且在某台服务器下线后主动寻找可用的服务器执行任务。
作业启动流程
作业执行流程
二、应用
引入maven依赖
<!-- elastic-job start -->
<dependency> <groupId>com.dangdang</groupId> <artifactId>elastic-job-lite-core</artifactId> <version>2.0.0</version></dependency><dependency> <groupId>com.dangdang</groupId> <artifactId>elastic-job-lite-spring</artifactId> <version>2.0.0</version></dependency><!-- elastic-job end --><!-- zookeeper -->
<dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.9</version></dependency>作业开发
public class TestTask implements SimpleJob{
public void execute(ShardingContext context) { System.out.println("定时任务测试"); }}
作业配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="" xmlns:xsi="" xmlns:reg="" xmlns:job="" xsi:schemaLocation=" "><!-- 配置注册中心 ,任务的信息都会在zk中存储 -->
<reg:zookeeper id="regCenter" server-lists="127.0.0.1:2181" namespace="test-job" base-sleep-time-milliseconds="1000" max-sleep-time-milliseconds="3000" max-retries="3" /><!-- 配置简单作业 -->
<job:simple id="testTask" class="com.xxx.TestTask" registry-center-ref="regCenter" cron="0 10 * * * ?" sharding-total-count="1" overwrite="true"><!-- 分片为1,即不需要分片;支持覆盖,即会用本次的配置覆盖缓存在zk中的配置 --> <job:event-log /><!-- job运行日志记录到log --> <job:event-rdb driver="${ds1.jdbc.driver_class_name}" <!-- job运行日志记录到DB, 详细参考:--> url="${ds1.jdbc.url}" username="${ds1.jdbc.username}" password="${ds1.jdbc.password}" log-level="INFO" /></job:simple></beans>
三、运维工具
部署方式
部署运维平台war文件(elastic-job-lite-console.war)至任何支持Servlet的Web容器(可选)。 运维平台以war包形式提供,可自行部署至tomcat或jetty等支持servlet的web容器中。elastic-job-console.war可通过mvn install编译或maven中央仓库获取。
WEB-INF/classes/conf/auth.properties记录的是登录用户和密码
功能说明
两个维度查看:job维度、服务器维度
job维护:手动触发job,停止job,删除job,修改job配置,job状态查看。lite版本没有手动添加任务功能