在基础篇中,搭建用例环境,并运行时,控制台有如下输出:
聪明的你,估计会咧嘴一笑,嘿嘿嘿,貌似elastic-job-lite 支持不同的任务类型哈!!
对此,我只能说,兄台你真是天资聪慧,恭喜你猜对鸟。。。。。
那么,elastic-job-lite 究竟支持哪些任务类型呢?
参照http://dangdangdotcom.github.io/elastic-job/elastic-job-lite/01-start/dev-guide/,大致有有如下三种类型:
a. Simple类型作业
意为简单实现,未经任何封装的类型。需实现SimpleJob接口。该接口仅提供单一方法用于覆盖,此方法将定时执行。与Quartz原生接口相似,但提供了弹性扩缩容和分片等功能
b. Dataflow类型作业
Dataflow类型用于处理数据流,需实现DataflowJob接口。该接口提供2个方法可供覆盖,分别用于抓取(fetchData)和处理(processData)数据。
流式处理
可通过DataflowJobConfiguration配置是否流式处理。
流式处理数据只有fetchData方法的返回值为null或集合长度为空时,作业才停止抓取,否则作业将一直运行下去; 非流式处理数据则只会在每次作业执行过程中执行一次fetchData方法和processData方法,随即完成本次作业。
如果采用流式作业处理方式,建议processData处理数据后更新其状态,避免fetchData再次抓取到,从而使得作业永不停止。 流式数据处理参照TbSchedule设计,适用于不间歇的数据处理。
c. Script类型作业 (这个我们后端应该用到的地方不多,后续就不详细介绍了,此处一笔带过)
Script类型作业意为脚本类型作业,支持shell,python,perl等所有类型脚本。只需通过控制台或代码配置scriptCommandLine即可,无需编码。执行脚本路径可包含参数,参数传递完毕后,作业框架会自动追加最后一个参数为作业运行时信息。
由于,我们后端使用Script作业类型,估计需求不是很大,因此此处就一笔带过。
首先,了解下用例中用到的四个参数的含义
接下来,结合我们在“基础篇”中搭建的用例环境,详细了解下前两种类型作业。
(1)Simple类型作业
a、配置 application.yml 中的
b、上述配置,在com.dangdang.ddframe.job.example.config.SimpleJobConfig的 simpleJobScheduler 方法中用到,用于装配 simple类型作业的调度器
调度器构造中,用到了 具体的 simple类型作业 对象 SpringSimpleJob,实现 elastic-job-lite 的 SimpleJob 接口
excute方法,做具体的 作业处理逻辑
(2)Dataflow类型作业
a、配置 application.yml 中的
b、上述配置,在com.dangdang.ddframe.job.example.config.DataflowJobConfig的 dataflowJobScheduler方法中用到,用于装配 dataflow类型作业的调度器
调度器构造中,用到了 具体的 dataflow类型作业 对象 SpringDataflowJob, 实现 elastic-job-lite 的 DataflowJob接口
fetchData方法和processData方法的具体作用,请参见本文前半部分,对DataFlow类型作业的描述。
用例环境中,Dataflow类型作业,在构建相关配置时,选择使用了“流式处理”,如下代码:
因此,SpringDataflowJob类中,processData方法中,使用 更新其状态,避免fetchData再次抓取到,从而使得作业永不停止。
综上,基本描述清楚了,如何构建两种作业类型,以及使用的一些注意点。
下面,再提一下,如何对作业运行进行监听。
监听的目的,是想在作业运行前后,进行相关的一些业务操作,比如进行某些业务统计,统计完成后给相关人员发邮件通知他们。
以用例环境中的 simple类型作业为例,对该作业进行监听,如何添加监听器呢?
(1)新增一个监听器类 MyElasticJobListener,具体如下
beforeJobExecuted,在作业执行前执行,打印作业相关信息;
afterJobExecuted,在作业执行前执行,打印作业相关信息;
(2)com.dangdang.ddframe.job.example.config.SimpleJobConfig 中,getLiteJobConfiguration 方法进行如下修改:
(3)运行 com.dangdang.ddframe.job.example.SpringBootMain,控制台会有类似如下输出:
关于作业监听器,如果我的唧唧歪歪说的不够清楚,你也可以自行参考官方文档 http://dangdangdotcom.github.io/elastic-job/elastic-job-lite/02-guide/job-listener/
OK,本文噼里啪啦一阵说完,估计应该大体描述清楚了,如何根据需要创建不同类型任务,以及如何对任务进行监听。
但是,对于elastic-job-lite的底层代码是如何撰写,如何实现各种相关功能的呢?
对于这些底层深挖的东东,我们不妨先歇一歇,放在 后续的 高级篇 中详述。