thinkphp6 thinkphp-queue延迟发送邮件

第一步:安装插件

composer require topthink/think-queue

第二步:设置配置文件

thinkphp-queue安装完成后,在config文件夹会生成queue.php

这里可以选择默认使用redis模式

image.png

第三步:创建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