Laravel 5.2 教程 - 队列
来源:互联网 发布:java websocket客户端 编辑:程序博客网 时间:2024/06/11 07:41
一、简介
Laravel 队列组件提供一个统一的 API 集成了许多不同的队列服务,队列允许你延后执行一个耗时的任务,例如延后至指定的时间才发送邮件,进而大幅的加快了应用程序处理请求的速度。
由于本例子用到邮件功能,不了解的童鞋请移步(Laravel 5.2 教程 - 邮件)。
二、配置
1. 配置文件
队列配置文件存放在config/queue.php。在该文件中你将会找到框架自带的每一个队列驱动的连接配置,包括数据库、Beanstalkd、 IronMQ、 Amazon SQS、 Redis以及同步(本地使用)驱动。其中还包含了一个null队列驱动以拒绝队列任务。
.env 配置默认是同步sync 本文章演示使用database方式
2. 迁移队列需要的数据表
php artisan queue:tablephp artisan migrate
三、编写任务类
1. 生成任务类
默认情况下,应用的所有队列任务都存放在app/Jobs目录。
php artisan make:job SendReminderEmail
该命令将会在app/Jobs目录下生成一个新的类,并且该类实现了Illuminate\Contracts\Queue\ShouldQueue接口,告诉Laravel该任务应该被推送到队列而不是同步运行。
2. 编写任务类
下面是一个通过队列发送邮件的简单例子:
<?php namespace App\Jobs; use App\Jobs\Job; use Illuminate\Queue\SerializesModels; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Contracts\Queue\ShouldQueue; use Mail; class SendReminderEmail extends Job implements ShouldQueue { use InteractsWithQueue, SerializesModels; protected $email; /** * 创建一个新的任务实例 * * @param $email */ public function __construct($email) { $this->email = $email; } /** * 执行任务 * * @return void */ public function handle() { // 发送邮件 Mail::raw('Queue test', function($message) { $message->subject('测试邮件,勿回'); $message->to($this->email); }); } }
四、推送任务到队列
1. 控制器中
因为Laravel app/Http/Controllers/Controller.php 使用了DispatchesJobs trait。该trait提供了一些允许你方便推送任务到队列的方法,例如dispatch方法:
$this->dispatch(new SendReminderEmail('849291170@qq.com'));
2. DispatchesJobs trait
如果你想在路由或控制器之外的某些地方分发任务,可以使用DispatchesJobs trait 在任何地方将任务添加到队列。下面是在模型中使用的例子:
<?php namespace App; use App\Jobs\SendReminderEmail; use Illuminate\Database\Eloquent\Model; use Illuminate\Foundation\Bus\DispatchesJobs; class Student extends Model { use DispatchesJobs; public static function queue() { dispatch(new SendReminderEmail('849291170@qq.com')); } }
3. 延迟执行
下面是延迟60秒执行的例子:
$job = (new SendReminderEmail('849291170@qq.com'))->delay(60);$this->dispatch($job);
五、运行队列监听器
Artisan控制台运行如下命令
php artisan queue:listen
使用–tries开关来指定任务最大可尝试执行次数
php artisan queue:listen --tries=3
六、处理失败的任务
任务执行次数达到最大限制后,会被插入到failed_jobs表,失败任务的名字可以通过配置文件config/queue.php来配置。
1. 迁移记录失败队列需要的数据表
php artisan queue:failed-tablephp artisan migrate
2. 重试失败任务
要查看已插入到failed_jobs数据表中的所有失败任务,该命令将会列出任务ID,连接,对列和失败时间。
php artisan queue:failed
任务ID可用于重试失败任务,例如,要重试一个ID为5的失败任务,要用到下面的命令:
php artisan queue:retry 5
要重试所有失败任务,使用如下命令即可:
php artisan queue:retry all
如果你要删除一个失败任务,可以使用queue:forget命令:
php artisan queue:forget 5
要删除所有失败任务,可以使用queue:flush命令:
php artisan queue:flush
交友互动:
本文首发于马燕龙个人博客,欢迎分享,转载请标明出处。
马燕龙个人博客:http://www.mayanlong.com
马燕龙个人微博:http://weibo.com/imayanlong
马燕龙Github主页:https://github.com/yanlongma
- Laravel 5.2 教程 - 队列
- laravel 5.2队列延时
- Laravel 5.2 教程 - 迁移
- Laravel 5.2 教程 - 邮件
- laravel 5.2教程
- laravel队列
- 3. Laravel5学习笔记:laravel队列使用教程
- Laravel 5.2 教程 - 数据填充
- Laravel 5.2 教程 - 文件上传
- Laravel教程二 安装Laravel
- laravel使用mysql队列
- Laravel中的队列处理
- Laravel中的队列处理
- laravel-队列消息
- laravel之队列使用
- Laravel队列处理
- laravel 的jobs(队列)
- laravel 异步消息队列
- Redis集群规范(一)
- (常用时间类练习)可视化简易日历
- Contest - 多校训练(三
- Android Studio查看android源码
- Python学习笔记1
- Laravel 5.2 教程 - 队列
- HDu 5855
- ZZULI OJ 1914: 天火好帅(搞不懂的水题)
- NLPIR 汉语分词系统 (PyNLPIR) 学习手札
- jzoj 4709. 【NOIP2016提高A组模拟8.17】Matrix 组合数+乘法逆元
- C# asp.net页面通过URL参数传值中文乱码问题解决办法
- Linux下find指令
- Android Webview中解决H5的音视频不能自动播放的问题
- 网易视频云 php接口