文档章节

Laravel 5.2 教程 - 队列

天秤vs永恒
 天秤vs永恒
发布于 2016/11/05 13:57
字数 934
阅读 10
收藏 1

一、简介

Laravel 队列组件提供一个统一的 API 集成了许多不同的队列服务,队列允许你延后执行一个耗时的任务,例如延后至指定的时间才发送邮件,进而大幅的加快了应用程序处理请求的速度。

由于本例子用到邮件功能,不了解的童鞋请移步(Laravel 5.2 教程 - 邮件)

二、配置

1. 配置文件

队列配置文件存放在config/queue.php。在该文件中你将会找到框架自带的每一个队列驱动的连接配置,包括数据库、Beanstalkd、 IronMQ、 Amazon SQS、 Redis以及同步(本地使用)驱动。其中还包含了一个null队列驱动以拒绝队列任务。

.env 配置默认是同步sync 本文章演示使用database方式

2. 迁移队列需要的数据表

php artisan queue:table
php 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-table
php 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

本文转载自:http://blog.csdn.net/json_vip/article/details/52232558

天秤vs永恒
粉丝 4
博文 37
码字总数 17724
作品 0
长宁
项目经理
私信 提问
Laravel5.2队列驱动expire参数设置带来的重复执行问题 数据库驱动

'connections' => [ .... 'database' => [ 'driver' => 'database', 'table' => 'jobs', 'queue' => 'default', 'expire' => 60, ], 'redis' => [ 'driver' => 'redis&ap...

daweilang
2017/05/07
0
0
Laravel5.2之Redis保存页面浏览量

说明:本文主要讲述使用Redis作为缓存加快页面访问速度。同时,会将开发过程中的一些截图和代码黏上去,提高阅读效率。 备注:最近在学习github上别人的源码时,发现好多在计算一篇博客页面访...

botkenni
2016/10/21
16
0
《PHP框架Laravel学习》系列分享专栏

《PHP框架Laravel学习》已整理成PDF文档,点击可直接下载至本地查阅 https://www.webfalse.com/read/201735.html 文章 Laravel教程:laravel 4安装及入门 Laravel4中文手册下载 Laravel配置教...

开元中国2015
2018/11/06
0
0
Laravel5.4实战快速开发自媒体网站教程 Laravel实战教程

第1章 课程介绍 介绍课程的大体脉络和课程安排 第2章 Laravel 5.4介绍 本节课会带领大家介绍laravel的各个版本历史以及讨论php框架的未来发展趋势。把laravel周边的生态环境一一展示。 第3章...

15543595340
2018/05/19
0
0
Laravel 5.3 正式发布,PHP 开发框架

Laravel 5.3 正式发布了,Laravel 5.3 在 5.2 基础上进行了优化。 新特性包括以下: 消息通知系统 Laravel Notifications; 事件广播系统 Laravel Echo; Laravel Passport 快速 OAuth2 服务...

局长
2016/08/25
5K
31

没有更多内容

加载失败,请刷新页面

加载更多

状态模式

//相当把一个State对象存到Context对象中,然后通过Context实例化对象调用保存的state对象去调用state的相应的方法 https://blog.csdn.net/syc434432458/article/details/51210361...

南桥北木
19分钟前
0
0
基于 Jenkins + JaCoCo 实现功能测试代码覆盖率统计

本文首发于:Jenkins 中文社区 使用 JaCoCo 统计功能测试代码覆盖率? 对于 JaCoCo,有所了解但又不是很熟悉。 "有所了解"指的是在 CI 实践中已经使用 JaCoCo 对单元测试代码覆盖率统计: 当...

Jenkins中文社区
27分钟前
3
0
聊聊Elasticsearch的OsProbe

序 本文主要研究一下Elasticsearch的OsProbe OsProbe elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/monitor/os/OsProbe.java public class OsProbe { private static f......

go4it
27分钟前
0
0
谈谈lucene的DocValues特性之NumericDocValuesField

在默认实现的DocValuesCosumer中,数值有可能分块存储也有可能放在一个数据块中存储。 分块的大小默认是16384,并且通过预先计算如果按一个块存储最大值与最小值的差所占用的比特数和分块存储...

FAT_mt
45分钟前
0
0
【BATJ】面试必问MySQL索引实现原理

BATJ面试题剖析 1、为什么需要使用索引? 2、数据结构Hash、平衡二叉树、B树、B+树区别? 3、机械硬盘、固态硬盘区别? 4、Myisam与Innodb B+树的区别? 5、MySQL中的索引什么数据结构? 6、...

须臾之余
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部