第一步:安装插件
composer require topthink/think-queue
第二步:设置配置文件
thinkphp-queue安装完成后,在config文件夹会生成queue.php
这里可以选择默认使用redis模式
第三步:创建job任务文件
比如在app/jobs文件夹下创建mail文件
class SendMail { /** * 默认任务 * @param Job $job 当前任务 * @param mixed $data 任务数据 */ public function fire(Job $job, $data) { // 发送邮件,send_mail方法需要自己封装 $res = send_email($data); // 发送成功,删除当前任务。如果不删除,会重新执行任务!!! if ($res) { $job->delete(); return; } // 如果重试发送超过3次都没成功,那就记录错误一条日志 if ($job->attempts() > 3) { error_log('邮件发送失败'); $job->delete(); return; } // 当然,如果测试时间不想因为失败而导致删除任务,可以重新发布任务 $job->release(5); } }
第四步:在controller中添加队列
class Index{ public function add(){ $job_handle_name = 'app\job\Test'; $job_queue_name = "testTask"; $data = [ 'name'=> 'queue-' .rand(1, 9), 'time'=> time(), ]; // 发送发布:任务名, 参数, 队列名 Queue::push($job_handle_name, $data, $job_queue_name); // 延迟发布: 延迟时间, 任务名, 参数, 队列名// Queue::later('2',$jobHandlerName,['name'=>$time],$jobQueueName); echo '加入队列成功:'.$data['time']; }}
第五步: 监听任务并执行
php think queue:listen --queue 任务名
php think queue:work --queue 任务名
两种,具体的可选参数可以输入命令加 –help 查看
Linux启动守护进程
nohup php think queue:work --daemon --queue 任务名称 & //该命令似乎执行会失败
建议使用supervisor管理进程
查看任务进程编号 jobs -l