定时任务调度:在某个时间点触发执行操做(CURD)。git
分布式任务调度平台的使用场景:数据同步、交易信息(对帐)、清除过时用户信息、按期发送报表、消息推送。github
传统的定时任务特征:单点系统(job没有集群)数据库
思考:若是job在高并发的状况下,致使job服务器宕机以后,这时候应该如何处理?服务器
1.定时任务和业务服务放在用一个jvm中(小项目)并发
2.大型互联网公司定时任务代码执行与业务执行代码服务器都是分开的,都是独立的jvm。负载均衡
3.定时任务服务器是否须要考虑高并发状况?须要,由于同一时间点可能执行多个任务。间隔执行场景不须要,同时执行须要考虑高并发状况。运维
4.若是在高并发状况下,定时job宕机后,该如何处理(只有一台服务器的状况下) ?使用心跳检测监控自动重启、补偿机制,每一个任务作一个标记。jvm
定时任务在执行代码的时候忽然报错了,该如何处理?日志记录错误,跳过当前错的任务,接着执行下一个任务。在使用定时job扫描错误日志记录,进行补偿信息。分布式
分布式定时任务特征:job使用集群。高并发
产生问题:定时任务打成3个war包放在三个不一样服务器上(8080、808一、8082)。定时任务在每一个war包中都是相同的,三台服务器启动以后,定时job会被重复执行3遍。
1.使用zookeeper实现分布式锁方式,不推荐效率低。
2.在配置文件中加上打开定时job的开关8080 设置flag=true、8081 设置flag=false、8082设置 flag=false,这种方法不属于分布式了 属于单点的系统,不推荐。
3.启动的时候使用数据库的惟一标示,不推荐效率低。
4.使用分布式任务调度平台xxl-job、Elastric-job(依赖于zk)、TBSchedule。
xxl-job
1.支持集群(保证幂等性问题)、job负载均衡轮询机制。
2.支持job补偿,若是job执行失败的话,会自动实现重试机制,若是重启屡次仍是失败的话,会发送邮件给运维人员。
3.支持job日志记录。
4.动态配置定时规则,传统的定时job规则都是写死的。
.......
其余优势在文档中能够查看
xxl-job github地址:
https://github.com/xuxueli/xxl-job
xxl-job 文档:
执行器:定时job实际执行的服务器地址。
任务管理:配置定时任务的规则、路由策略、运行模式、报警邮箱。
xxl-job-Admin:单独的Web服务,是job的管理平台。
步骤:
1.在xxl-job admin平台建立执行器(job实际的执行地址)。
2.在xxl-job admin 平台新建任务,填写对应的执行器。
3.在job服务器代码中,使用JobHandler标示该类为job执行方法。
4.若是有任务须要执行的时候,先在xxl-job admin执行一次,获取任务中的执行器(实际job地址)。
执行器项目启动的时候,会将服务器本地信息注册到xxl-job平台,只要类上添加@JobHandler(value="name")注解 就会注册到xxl-job平台上。