elastic-job分为elastic-job-lite 和elastic-job-cloud两部分,笔者最近打算再深度学习一下elastic-job,看了下版本升级到2.1.5了,我们就按照这个版本来学习elastic-job。
文档官网:http://dangdangdotcom.github.io/elastic-job/elastic-job-lite/01-start/quick-start/
首先我们要了解一下什么是任务调度,调度就是将一个任务套上一个时间,让该任务可以在时间规律上去循环执行。一般的技术quartz、spring task、java.util.Timer,这几种如果在单一机器上跑其实问题不大,但是如果一旦应用于集群环境做分布式部署,就会带来一个致命的问题,那就是重复执行,当然解决方案有,但是必须依赖数据库,将任务执行状态持久化下来。所以当当就把quartz和zookeeper结合起来达到分布式调度,并且添加其他功能,形成了elastic-job。
功能列表:
分布式调度协调
弹性扩容缩容
失效转移
错过执行作业重触发
作业分片一致性,保证同一分片在分布式环境中仅一个执行实例
自诊断并修复分布式不稳定造成的问题
支持并行调度
支持作业生命周期操作
丰富的作业类型
Spring整合以及命名空间提供
运维平台
下面我们来学习一下elastic-job-lite
首先我们可以先将运维平台搭建起来:
1、https://github.com/dangdangdotcom/elastic-job
下载源码
找到elastic-job-lite 下面的elastic-job-lite-console,然后用mvn 打包。
最终得到elastic-job-lite-console-2.1.5.tar.gz。保存下来上传到linux下,并且解压,在bin文件夹下执行./start.sh (-p 可以指定端口号)
启动成功访问 地址:端口号
能访问到这个页面就算搭建成功了。
(elastic-job 是依赖zookeeper来做协调的,所以还需要有zookeeper环境,搭建很简单,我就不贴出来)
现在开始编写任务代码:
job类型分为 SimpleJob 简单任务、Dataflow类型作业、Script类型作业
我们先来最简单的SimpleJob
首先将依赖的包引入进来:
<dependency>
<groupId>com.dangdang</groupId>