分布式定时任务Elastic-Job支持手动添加一次性任务

分布式定时任务Elastic-Job支持手动添加一次性任务_第1张图片
Elastic-Job

最近用到定时任务,业务场景需要支持分布式,虽然Elastic-Job已经停更,但基本满足需求,且该框架已经经过多个厂家生产验证,撸了把源码也感觉框架较轻量容易把控一些,因此基于Elastic-Job-lite实现定时任务

几个痛点
  • 存在手动触发任务的场景(虽然后来暂时没有通过此方式实现,本文如果有任何存在漏洞的地方,欢迎拍砖),但是Elastic-Job不支持
  • 希望手动触发的任务仍然可以借助Elastic-Job弹性机制(失效转移和分片机制)
  • 手动触发任务可能是一次性的,即希望在某个任务执行完毕后再触发相关任务的执行,也就是任务之间存在依赖关系
  • 希望实时看到任务的处理情况,也就是elastic-job-lite-console做的事,但是elastic-job-lite-console需要单独部署直连zookeeper,zookeeper可能在内网,当然也可以把console部署在内网,这样会增加一些维护的麻烦
做了哪些事
  • 增加任务注解ScheduledTask,减少开发工作量,开发同学只需要增加注解配置即可,也支持将任务配置提升到application.yml等配置文件中,配置文件优先级最高
  • 支持手动增加定时任务(如定时任务在1分钟后启动),通过所有分布式节点增加zookeeper namespace监听,namespace增加和删除job结点时与本jvm运行JobRegistry比对,决定是否增删job
  • 支持任务仅执行一次,在job parameter中增加runOnce参数,在AbstractDistributeOnceElasticJobListener中监听任务执行情况,当任务所有分片执行完毕后,删除zookeeper job结点,关闭本jvm job及job listener(防止线程数不断攀升)
  • 自定义exceptionhandler,方便增加适合于自身业务的日志告警
  • 将elastic-job-lite-console融合到本工程,因为console自带鉴权机制较弱,建议定时任务工程需要通过https访问,或者修改鉴权机制
  • 增加了一个任务监听告警机制,如果任务在cron规定时间没有启动则报警,感觉这个比较鸡肋,可以通过参数关闭

样例工程

分布式定时任务Elastic-Job支持手动添加一次性任务_第2张图片
console

历史文章:

  • Select查询是否需要主动处理事务
  • Netty一:我和NIO不得不说的关系
  • Spring Boot系列之三:从Apollo看Spring的扩展机制
  • Zookeeper是如何保证顺序一致性的
  • 你真的懂volatile吗
  • Redis Scan算法设计思想
  • 微服务session落坑记
  • 从动态代理实现到Spring AOP看这一篇就够了
  • Spring Boot系列之一:如何快速熟悉Spring技术栈
  • Spring Boot系列之二:一张图看懂请求处理流程
  • 一张图看懂Dubbo服务引用全过程
    68号小喇叭

你可能感兴趣的:(分布式定时任务Elastic-Job支持手动添加一次性任务)