安装命令(thinkphp一般自带) 可以自行查看 composer show
composer require topthink/think-queue
application\extra\queue.php
<?php return [ // 用redis示例 'connector'=>'redis', 'expire' => 36000, 'default' => 'Xiaohe', 'host' => '127.0.0.1', 'port' => 6379, 'password' => '', 'select' => 6, 'timeout' => 0, 'persistent' => false //database // 'connector' => 'database', // 'expire' => 60, // 'default' => 'default', // 'table' => 'faqueue_jobs', // 'dsn' => [ // 'type' => 'mysql', // 'database' => '', // 'hostname' => '', // 'username' => '', // 'password' => '', // 'prefix' => '', // ] ];
加入任务
$data = $this->request->param(); //建议$data值放少一点,服务器内存大或者任务少随便放 //import_pct 是任务名称一会儿运行命令需要可以自己改 $res = \think\Queue::push('app\api\controller\Task@AddTask',$data , 'import_pct'); //延迟600秒执行该任务 //$res = \think\Queue::later(600,'app\api\controller\Task@AddTask',$data , 'import_pct'); $this->success('已加入后台导入任务');
$data = $this->request->param();
//建议$data值放少一点,服务器内存大或者任务少随便放
//import_pct 是任务名称一会儿运行命令需要可以自己改
$res = \think\Queue::push('app\api\controller\Task@AddTask',$data , 'import_pct');
//$res = \think\Queue::later(600,'app\api\controller\Task@AddTask',$data , 'import_pct');
$this->success('已加入后台导入任务');
application/api/controller/AddTask.php
use think\Queue; use think\Queue\Job; /** * 添加的任务处理 * * @return void */ public function AddTask(Job $job,$data) { //这里面可以长时间执行但是超长时间运行 在执行运行命令加上超时时间,(毕竟有默认超时时间) var_dump($data); $data['name'] = '没有该表名'; if(isset($this->arr[$data['table']])){ $data['name'] = $this->arr[$data['table']]; } $s = time(); $insert_id = $this->insert_task($data); if(!$insert_id){//如果插入任务失败直接删除该任务 $job->delete(); return '该任务被删除'; }else{ $data['id'] = $insert_id; switch ($data['table']) { case 'pct_valid': $Admin = new \app\api\controller\PctValid; break; default: # code... break; } $msg = $Admin->import($data);//开始执行导入 返回结果 if($msg==1){ Db::name('task')->where('id',$insert_id)->update(['e_time'=>time(),'s'=>(time()-$s),'status'=>'3']); $job->delete(); return '导入成功'; }else{ var_dump('任务ID'.$insert_id .$msg); Db::name('task')->where('id',$insert_id)->update(['status'=>'4','error'=>$msg]); $job->delete(); return '导入失败'; } } }
队列监听命令 `php think queue:work --queue import_pct` 运行超时时间(秒) `php think queue:listen --queue import_pct --timeout=8000`
队列监听命令
`php think queue:work --queue import_pct`
运行超时时间(秒) `php think queue:listen --queue import_pct --timeout=8000`
详细文档参考
https://github.com/coolseven/notes/blob/master/thinkphp-queue/README.md