.env
文件的 **QUEUE_CONNECTION **字段配置为 databasephp
Laravel可配置多种队列驱动,包括 "sync", "database", "beanstalkd", "sqs", "redis", "null"(具体参见app/config/queue.php)
其中sync为同步,database为使用数据库,后面三种为第三方队列服务,最后一种为不使用队列。mysql
该位置具体是什么请查看app/queue
laravel
为了使用 database
队列驱动,你须要一张数据表来存储任务。redis
php artisan queue:table
生产一张队列表sql
php artisan migrate
mysql版本5.7.7如下可能会报以下错误数据库
解决方案网络
打开app/Providers/AppServiceProvider
文件,在boot方法中加入以下代码,删除数据库中已经生成的迁移数据表,再次运行就能够成功。app
必定要删除已经生成的job数据表,否者汇报以下错误ide
\Schema::defaultStringLength(191); //add fixed sql
数据库最终效果测试
在你的应用程序中,队列的任务类都默认放在 app/Jobs
目录下。
若是这个目录不存在,那当你运行 make:job
Artisan 命令时目录就会被自动建立。
你能够用如下的 Artisan 命令来生成一个新的队列任务:
php artisan make:job SetLog
protected $message; /** * Create a new job instance. * * @return void */ public function __construct($message) { $this->message = $message; } /** * Execute the job. * * @return void */ public function handle() { \Log::info($this->message); }
public function index(Request $request){ SetLog::dispatch(date('Y-m-d H:i:s') . "进入了系统"); }
这时,因为队列还没开启,数据库的队列表中会有一个任务,等待队列启动后执行
php artisan queue:work
这时,队列表中的任务执行后就会自动删除了,相似消费了任务
以上是抛转引玉的一个简单例子,具体细节能够查看laravel的队列文档