laravel 队列应用2
laravel 队列应用
介绍:
laravel队列服务为各种不同的后台队列提供了统一的API
允许推迟耗时任务(例如邮件发送)的执行,从而大幅提高web请求速度
主要步骤:
1、迁移队列需要的数据表
2、编写任务类
3、推送任务到队列
4、运行队列监听
5、处理失败任务
配置文件在config/queue.php
修改.env文件QUEUE_DRIVER=database 改为数据库驱动
1、生成迁移队列需要的数据表
php artisan queue:table (创建了迁移文件job,而且里面已经有了表的结构)
php artisan migrate (生成了jobs)
2、编写任务类(样例是要做个邮件发送任务)
php artisan make:job SendEmail (在app文件夹下生成了Jobs文件夹,里面有SendEmail.php文件)
这样一个任务类就写完了
3、推送任务到队列中
一调用这个queue()这个方法,数据库jobs表就多了一条记录,这个记录就是我们的任务,也就是所谓的队列
我们已经把任务推送到队列中了,但是还没有执行
4、运行队列监听器
php artisan queue:listen
(报错了,其实没问题,只是测试多了163邮箱给屏蔽了,于是改了SendEmail.php文件)
再次访问了控制器,就是重新推送一个任务大到队列中
日志文件中也多了一条记录。这样队列就已经成功了
5、处理失败任务
任务执行失败会保存到一个表,但是那个表还没有创建,这个表在php artisan list的queue下面可以看到
php artisan queue:failed-table
php artisan migrate
php artisan queue:failed 查看执行错误的队列
php artisan queue:retry 1 重新执行失败的队列,try后面跟的是id
php artisan queue:retry all 重新执行所有的错误队列
错误的队列再次执行在failed_jobs表里id会变(应该是自增)
查看执行错误的队列php artisan queue:failed (也可以在数据库查看)
php artisan queue:forget 4 删除那条记录
php artisan queue:flush 删除所有的错误记录
放进其他任务
删除一条或所有失败任务
查看失败任务,重新执行一条或所有失败任务
表中包含失败记录信息
php artisan queue:failed-table
创建失败表迁移文件
php artisan migrate
创建失败表
队列还在监听
放进其他任务
把任务放进队列中,dispatch()不需要使用命名空间是因为controller调用DispatchesJobs这个traits,在模型中要手动use DispatchesJobs
添加邮件发送任务
添加邮件发送任务
创建邮件发送任务
创建队列表和创建迁移文件
队列配置文件queue.php在config目录下
主要步骤2
主要步骤1
队列的作用
删除执行失败queue队列中的任务:
php artisan queue:forget 4
php artisan queue:flush
查看队列中失败的任务:
php artisan queue:failed
重新执行失败queue队列中的任务:
php artisan queue:retry #queue_id
建立队列失败的数据表:
php artisan queue:failed-table
php artisan migrate
执行队列中的任务:
php artisan queue:listen
调用任务类完成任务注册到队列中:
dispatch(
new SendEmail('752766395@qq.com')
)
创建的任务类
SendEmail.php
队列操作的五个步骤:
1、迁移队列需要的数据表;
2、编写任务类;
3、推送任务到队列中;
4、运行队列监听器;
5、处理失败的任务;
--------------------------------
配置文件在 config/queue.php
--------------------------------
创建数据表:
php artisan queue:table
php artisan migrate
--------------------------------
创建任务类:
php artisan make:job SendEmail