Laravel --- Laravel 5.3 队列使用方法

一.设置存储方式

  在config/queue.php中查看队列驱动,在.env 设置【QUEUE_DRIVER】

  主要介绍数据库驱动

二.数据库驱动

  1.修改.env

CACHE_DRIVER=file // 这个值按理不会影响队列使用,但测试的时候发现,这个值设为redis,且redis服务未启动,在执行php artisan queue:work会出现连接redis失败的错误,因此当QUEUE_DRIVER不为redis时,CACHE_DRIVER也不能为redis。原因不明
QUEUE_DRIVER=database

  2.创建job表

  php artisan queue:table
  php artisan migrate

我在重新测试的时候,执行php artisan queue:table

报错:include(vendorcomposer/../../database/migrations/2017_03_31_165417_create_jobs_table.php,

解决:composer dump-autoload

  3.创建任务文件

php artisan make:job insertJob

  查看生成的文件:appJobsInsertJob.php

<?php

namespace AppJobs;
use IlluminateBusQueueable;
use IlluminateQueueSerializesModels;
use IlluminateQueueInteractsWithQueue;
use IlluminateContractsQueueShouldQueue;
use IlluminateSupportFacadesDB;

class InsertJob implements ShouldQueue
{
    use InteractsWithQueue, Queueable, SerializesModels;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct(){}

    /**
     * 执行任务代码
     *
     * @return void
     */
    public function handle()
    {
        DB::table('comments')->insert(['content'=>'测试任务']);
    }
}

  4.在控制器中调用任务

appHttpControllersTestJobController.php

<?php
namespace AppHttpControllers;
use CarbonCarbon;
use AppJobsInsertJob;

class TestJobController extends Controller
{
    public function testJob()
    {
        // 表示一分钟后执行任务
        $job = (new InsertJob())->delay(Carbon::now()->addMinute(1));
        dispatch($job);
    }
}

访问相应路由后,在jobs表会生成一条待执行任务的数据:

  5.启用任务队列

php artisan queue:work

一分钟后出现:

说明执行成功,jobs表中的任务数据被删除,comments表新增了一条数据

  6.如果只是先把任务放入队列,之后再手动执行任务(可以和定时任务配合使用)

$job = (new SendReminderEmail())->onQueue('high');
dispatch($job);
php artisan queue:work --queue=high,low #指定要执行的队列名

 三.redis驱动,流程和数据库驱动一样,只是不用建表,不详叙

原文地址:https://www.cnblogs.com/taotaoxixihaha/p/6656942.html