zoukankan      html  css  js  c++  java
  • Laravel 5.2 教程

    一、简介

    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目录下生成一个新的类,并且该类实现了IlluminateContractsQueueShouldQueue接口,告诉Laravel该任务应该被推送到队列而不是同步运行。

    2. 编写任务类

    下面是一个通过队列发送邮件的简单例子:

    <?php
    
        namespace AppJobs;
    
        use AppJobsJob;
        use IlluminateQueueSerializesModels;
        use IlluminateQueueInteractsWithQueue;
        use IlluminateContractsQueueShouldQueue;
        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 AppJobsSendReminderEmail;
        use IlluminateDatabaseEloquentModel;
        use IlluminateFoundationBusDispatchesJobs;
    
        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

  • 相关阅读:
    设计模式学习总结系列应用实例
    【研究课题】高校特殊学生的发现及培养机制研究
    Linux下Oracle11G RAC报错:在安装oracle软件时报file not found一例
    python pro practice
    openstack python sdk list tenants get token get servers
    openstack api
    python
    git for windows
    openstack api users list get token get servers
    linux 流量监控
  • 原文地址:https://www.cnblogs.com/imayanlong/p/6033020.html
Copyright © 2011-2022 走看看