Laravel 队列应用
Posted 小白兔晒黑了
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel 队列应用相关的知识,希望对你有一定的参考价值。
Laravel队列服务为各种不同的后台队列提供了统一的api。例如:允许推迟耗时任务(例如发送邮件)的执行,从而大幅提高web请求速度、
步骤:
1 迁移队列需要的数据表
2 编写任务类
3 推送任务到队列
4 运行队列监听器
5 处理失败的任务
使用:
1 配置
\\config\\queue.php
支持的驱动类型:
"sync", 同步驱动
"database",数据库驱动
"beanstalkd",
"sqs",
"redis",
"null"
失败配置:
\'failed\' => [ \'driver\' => env(\'QUEUE_FAILED_DRIVER\', \'database\'), \'database\' => env(\'DB_CONNECTION\', \'mysql\'), \'table\' => \'failed_jobs\', ],
QUEUE_CONNECTION=database
2 创建迁移
php artisan queue:table
生成了一个迁移
3 执行迁移
php artisan migrate
4 创建任务
php artisan make:job SendEmail
5 任务代码
5.1 job
app\\Jobs\\SendEmail.php
<?php namespace App\\Jobs; use Illuminate\\Bus\\Queueable; use Illuminate\\Contracts\\Queue\\ShouldQueue; use Illuminate\\Foundation\\Bus\\Dispatchable; use Illuminate\\Queue\\InteractsWithQueue; use Illuminate\\Queue\\SerializesModels; use Mail; class SendEmail implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; protected $email; protected $subject; /** * Create a new job instance. * * @return void */ public function __construct($email,$subject) { // $this->email = $email; $this->subject = $subject; } /** * Execute the job. * * @return void */ public function handle() { // Mail::raw(\'队列测试\',function ($message){ $message ->to($this->email) ->subject($this->subject); }); } }
5.2 控制器调用
\\app\\Http\\Controllers\\StudentController.php
use Log;
public function queque() { $this->dispatch(new SendEmail(\'777777777@qq.com\',\'队列测试\')); }
调用以后会在数据库里发现一行:
6 执行
php artisan queue:listen
执行成功
只要一直保持Listen状态
再访问一下queque页面 又会执行一条。
ps:执行完毕后,job表会被清空
处理失败任务
查看失败任务:
php artisan queue:failed
重新执行第1个任务
php artisan queue:retry 1
重新执行所有任务
php artisan queue:retry all
如果执行成功,会在failed表里删除
不想执行失败的队列了
根据id号删除
php artisan queue:forget 2
删除全部
php artisan queue:flush
以上是关于Laravel 队列应用的主要内容,如果未能解决你的问题,请参考以下文章
需要一种有效的方法来避免使用 Laravel 5 重复代码片段