在你的项目中,可能会遇到使用异步任务的场景,异步任务需要满足以下需求
- 任务执行时间可自主设定(延时任务)
- 任务失败可重试,并有最大重试次数限制
- 任务失败后,下次重试的时间可自主设定,如固定间隔时间,随着失败次数增加逐渐增大间隔时间
- 对于有依赖关系的任务,需要按顺序执行
- 有些任务的执行结果依赖外部回调,需要有一个中间状态
php-jobs 是一个不错的实现。
这是一个抽象的库,具体的model和具体的任务内容需要自己实现,其它的都在库里实现好了。
为了方便广大使用Laravel的同学,还有Laravel版本:laravel-jobs
概念
任务集
为了处理有依赖关系的任务,或者虽然没有依赖关系,但需要作为一个整体执行的任务,任务被打包成任务集。
任务集中的子任务,可以是有依赖关系的,或者可独立执行的,或者两者都有。
有依赖关系的任务,需要按指定的顺序执行,前置的任务执行成功,才会尝试执行后置的任务。
任务
是组成任务集的最小单位,具体的工作在这里实现。
任务集
属性
- 名称
- 执行时间:等于最早的子任务的执行时间
- 包含的子任务(有依赖关系的、无依赖关系的)
- 状态
状态
- 初始状态:任务集创建时的状态
- 执行当中:任务集中至少有一个子任务已经尝试执行了,但有部分子任务未执行完结
- 成功:所有子任务都已成功执行
- 失败:至少有一个子任务执行失败了
子任务
属性
- 名称
- 执行时间
- 状态
- 已重试次数
状态
- 初始状态:任务创建时的状态
- 成功:任务成功执行
- 失败:任务经过多次(最大次数可设定)后,最终仍未成功执行
- 等待回调
- 待重试:任务执行失败,但尚未达到最大重试次数
项目还在慢慢完善,期待你的参与。
网友评论