任务队列适用后台长时间,批量、异步执行任务,如邮件、短信发送,每日生成报表等。
1.创建任务
要点:继承 并实现handle()
方法
2.把任务推送到指定队列中
$job = new UpdateJob(time(), 'ztbcms');
$queue = Queue::getInstance();
$result = $queue->push('high', $job);//注: high即为队列名
$result = $queue->push('high', $job, 1*60*60);//注: 第三个参数即为延迟执行时长,单位:秒
1.简单部署,本地测试时可以选择这种方式
上述命令监听了3个名为high,mid,low的队列。路由解析方式跟TP重写URL原理一样,/queue/worker/run
分别对应Module,Controller,Action,后面则是key-value的
参数
1.2. 平滑停止
2. 更安全的部署方式
用于功能的实现基于Controller-Action,可能会被恶意请求URL,因此我们提供了私钥校验
1.设置队列的私钥
$ php index.php /queue/worker/run/queue/high,mid,low/_qsk/ztbcms
3. 更稳定,多进程部署
使用进程管理软件进行配置。如:supervisor,
0.根据业务调整配置
Queue/Confi/config.php
:
若日常队列任务不多,可以适当延长
1.定期删除已完成任务
安装[计划任务模块],添加计划任务Queue\DeleteFinishJob
,推荐每日执行一次,每次删除7日前的已完成的任务。当然,可以根据你的业务逻辑调整其执行频率。
class DeleteFinishJob extends Cron {
public function run($cronId) {
$hour = 7 * 24; //删除X小时前已完成的任务,你可以
//....