laravel5 队列的应用

1.更改.env配置文件

默认是sync(同步),就是会立即执行,并没有放入队列。

QUEUE_DRIVER=database   

2.生成任务类

php artisan make:job TestJob --queued

运行后会在app/jobs/下生成一个TestJob.php

3.编辑任务类,修改其中的handle方法

namespace App\Jobs;

use App\Jobs\Job;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Bus\SelfHandling;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Storage;

class TestJob extends Job implements SelfHandling, ShouldQueue
{
    use InteractsWithQueue, 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()
    {
        //写入一个文件试试
        $arr = ['email_add'=>$this->email];
        Storage::disk('local')->put('testjobs.text',print_r($arr,true)."\r\n");
    }
}

4.在控制器的任意方法中调用方法加入队列

public function getTest()
{
    $this->dispatch(new TestJob('884358@qq.com'));
    echo "insert into job success";
}

5.打开指定的url,执行getTest方法,添加任务

运行后,会发现并没有立即写入文件,这时打开数据库中的jobs表,会发现里面多了一行记录。

6.运行队列监视器,执行任务

php artisan queue:listen

运行后,任务会被执行,会写一个文件到指定位置(/storage/app),同时,数据库里的该条任务会被清除。

发表评论

邮箱地址不会被公开。 必填项已用*标注