PHP知识

laravel 队列的使用

2018-08-30  本文已影响9人  _不能说的秘密i

laravel version: 5.4.*

为什么有使用队列?

使用队列可以将某些耗时任务(比如发送邮件)延迟执行从而大幅提升web请求速度

配置

队列的基本使用

1.迁移队列的数据表

php artisan queue:table
php artisan queue:failed-table
php artisan migrate

2.编写任务类

php artisan make:job  SendEmail
<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Mail;

class SendEmail implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected $email;


    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct($email)
    {
        $this->email = $email;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        Mail::raw('测试队列', function($message) {
            $message->to($this->email);
        });
    }

}

3.推送任务到队列

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Jobs\SendEmail;
use Mail;

class TestController extends Controller{
    public function queue(){
        // dispatch 的参数是你刚刚创建的任务类 /jobs 目录下的类
        dispatch(new SendEmail('3233824562@qq.com'));
    }
}

4.运行队列监听器

php artisan queue:listen

4.处理失败的任务

在任务失败时, 你可以选择 清除失败的任务或者 重新执行失败的任务

php artisan queue:failed
重新执行失败任务
php artisan queue:retry 1

此处的 1 失败任务表中的任务的 id, 表示重新执行指定id失败任务

php artisan queue:retry all
清除失败任务
php artisan queue:forget 2

此处的 2 失败任务表中的任务的 id, 表示清除指定id失败任务

php artisan queue:flush
上一篇 下一篇

猜你喜欢

热点阅读