- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
演进:新型计划任务续篇.pdf
演进:新型计划任务续篇
计算机科学中的任何问题都可以⽤另外的间接层解决,但是这通常会引发另 个问
题。 -- David Wheeler
2.15.1 新型计划任务回顾
在 [1.31]-新型计划任务:以接⼜形式实现的计划任务 章中,我们讨论了PhalApi 中
对计划任务的设计和底层实现。
但对于很多应⽤,很多项⽬,或者很多同学来说,仍然⽐较⼴泛,不能直接使⽤。
这 章则专门为此⽽进⾏演进,并提供最终可⽤的计划任务调度,同时我们也会阐明
如何进⾏扩展定制。
也就是说,这 章将提供Task扩展类库的统 调度⽅式,以便在启动crontab任务后,
可以通过数据库简单配置,即可执⾏各种任务。
2.15.2 最终调度的⽅式:crontab
出于对业务的考虑,我们⾸先需要明确此crontab调度⽅式所⽀持的功能,它应该包括
但不限于:
1、通过简单的数据库配置,即可启动 个新的任务
2、具备循环调度的能⼒,并能初步防⽌并发调度
3、可以对异常的任务进⾏修复
4 、优先执⾏太远未执⾏的任务
5、⽀持本地和远程两种调度⽅式、三种MQ类型,以及扩展的能⼒
2.15.3 核⼼时序图与分层
在原来的时序图基础上,我们可以进⾏演进的设计,追加了统 的调度后如下所⽰:
通过上⾯详细的时序图,我们可以发现⾥⾯的设计是出于这样的分层考虑:
序 层 关键 作 说明 如何使⽤
号
启动脚 客户端可以进⾏必要
1 本 crontab .php 操作crontab执⾏的脚本 的初始化⼯作
根据进程配置的数据库表,进不需要改动,直接使
2 进程级 Task_Progress run() ⾏循环调度 ⽤
客户端也可进⾏定制
进⾏计划任务调度的上下⽂环
3 触发器 Task_Trigger fire() 境,⽤于指定runner和mq类型 扩展,进⾏必要的操
作
MQ消
4 费与调 Task_MQ pop()和 不断消费MQ队列,并依次进 不需要改动,直接使
度 Task_Runner go() ⾏调度 ⽤,也可扩展
计划任 由客户端按接⼜形式
5 务服务 PhalApi_Api doSth() 执⾏计划任务服务 实现
虽然上⾯的层级,初看起来有点多,但我们再次验证了计算机那个伟⼤的定论:计算
机的任何问题都可以通过 个中间层来解决。
由此看出,上⾯的层级其实相当于:
客户端初始化 -- 直接使⽤ -- ⾃由组合与操作 -- 直接使⽤ -- 任务服务实现
2.16.4 进程配置的数据库表设计
CREATE TABLE `phalapi_task_progress` (
`id` bigint(20) OT ULL AUTO_I CREME T,
`title` varchar(200) DEFAULT COMME T 任务标题,
`trigger_class` varchar(50) DEFAULT COMME T 触发器类名,
`fire_params` varchar(255) DEFAULT COMME T 需要 递的参数,格式
`interval_time` int(11) DEFAULT 0 COMME T 执⾏间隔,单位:秒
`enable` tinyint(1) DEFAULT 1 COMME T 是否启动,1启动,0禁⽌
`result` varchar(255) DEFAULT COMME T 运⾏的结果,以json格式保
`state`
文档评论(0)