Files
phalapi-pro/public/wiki/2x-task.md
2022-03-21 11:16:38 +08:00

2.5 KiB
Raw Blame History

计划任务

配置计划任务

安装完成后,在pp_task_progress表可以看到全部的计划任务。

通过管理后台或者后台接口或者数据库pp_task_progress表,可以配置和维护计划任务。

执行计划任务

完成上述的计划任务配置后有两种方式可以执行计划任务。一种是常规的定时执行另一种是人工通过MQ触发执行。

需要注意的是,

  • 1通过crontab定时任务执行时会存在一定的延时1分钟左右视具体任务执行时间而定不能严格保证按配置的时间点执行
  • 2通过MQ触发执行时默认采用的是数据库MQ实现如果需要支持高并发需要先切换到Redis MQ在./config/di.php把MQ改为\PhalApi\Task\MQ\RedisMQ

定时执行计划任务

通过配置,可以定时执行计划任务。

在Linux系统上通过crontab -e修改添加计划任务:

# PhalApi专业版计划任务
*/1 * * * * php /path/to/bin/run_task.php > /dev/null

如果需要手动执行或进行测试,可以进入专业版根目录,然后运行脚本命令:

$ php ./bin/run_task.php

通过MQ手动执行计划任务

通过MQ可以在API接口中即同步请求中把耗时严重或者执行资源过多的请求改为异步的后台执行。实现代码是

$taskDomain = new \Base\Domain\Task();
$taskDomain->push('App.Task.Demo', array('str' => '传递给计划任务的接口参数'));

默认MQ是采用数据库存储添加到MQ后系统将会在1分钟内消费。

如何编写计划任务接口

编写计划任务的接口,和普通的前台接口类似,区别在于:

  • 1、计划任务用于后台运行通过调度器采用CLI方式执行
  • 2、计划任务没有上下文信息如果需要指定uid或者app_key请手动添加接口参数
  • 3、计划任务接口推荐统一放置在Task.*.*里面

以下是一个计划任务示例代码:

<?php
namespace Task\Api;
use App\Task\Api;

class Demo extends Api {
    
    public function getRules() {
        return array(
            'demo' => array(
                'str' => array('name' => 'str', 'default' => '示例参数'),
            ),
        );
    }
    
    /**
     * 计划任务接口-示例
     * @return string str 接收到的参数
     */
    public function run() {
        return array('str' => $this->str);
    }
}