本文基于Golang Crontab 实现了一个Crontab Job Manager。更加容易使用,同时也能够满足更加复杂的场景。
仓储地址, 如果有用,欢迎点赞,欢迎讨论,欢迎找茬。
需求
在开发中,经常遇到一些需要定时任务的场景。各个语言都有定时语言的库,Golang Cron 提供了Crontab Golang语言版本。这个库非常不错,提供最基本的定时任务编排的功能。但是一些复杂需求无法满足,比如
- 任何定时任务都有可能失败,失败了就panic了,这样非常不友好。最起码能够让我控制,失败是重试还是停止
- 某些任务执行周期要10s, 而用户设置的5s一执行,我能不能保证任何时间这个任务只执行一次
- 我想实时的看到任务的状态,比如是不是在运行?下次运行时间?上次运行时间?
- 我想看到任务执行了多少次,成功了多少次
- 我想要限制最大任务数量,比如超过10个任务在执行,不运行新的任务执行
- 任务执行完了可以告诉我逻辑上有错误,还是有结果。我还可以加上一些钩子函数来处理任务执行的结果
以上的需求都非常常见,可惜这个库都不支持^_^.
完全没用的例子
复杂定义任务的场景模型抽象出来大概也就是下面几个功能点,这个没用的例子可以很好的体现出来