Laravel 队列使用方法

一.设置存储方式

  在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(\vendor\composer/../../database/migrations/2017_03_31_165417_create_jobs_table.php,

解决:composer dump-autoload


3.创建任务文件

php artisan make:job insertJob

 

  查看生成的文件:app\Jobs\InsertJob.php


insert(['content'=>'测试任务']);
    }
}



4.在控制器中调用任务

app\Http\Controllers\TestJobController.php


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驱动,流程和数据库驱动一样