• laravel 队列的使用


    laravel version: 5.4.*

    为什么有使用队列?

    使用队列可以将某些耗时任务(比如发送邮件)延迟执行从而大幅提升web请求速度

    配置

    • 队列的配置文件: /config/queue.php
    • laravel 支持多种队列驱动 sync database beanstalkd sqs redis
    • 可以在 .env 文件中配置队列驱动的类型 QUEUE_DRIVER=database 默认是 sync

    队列的基本使用

    1.迁移队列的数据表

    • 创建迁移文件(队列记录表)
    php artisan queue:table
    
    • 创建迁移文件(失败队列记录表)
    php artisan queue:failed-table
    
    php artisan migrate
    
    • 执行数据库迁移, 执行后会在数据库中创建 jobsfailed_jobs 两个数据表

    2.编写任务类

    php artisan make:job  SendEmail
    
    • 编写任务类
    <?php
    
    namespace AppJobs;
    
    use IlluminateBusQueueable;
    use IlluminateQueueSerializesModels;
    use IlluminateQueueInteractsWithQueue;
    use IlluminateContractsQueueShouldQueue;
    use IlluminateFoundationBusDispatchable;
    use Mail;
    
    class SendEmail implements ShouldQueue
    {
        use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
    
        protected $email;
    
    
        /**
         * Create a new job instance.
         *
         * @return void
         */
        public function __construct($email)
        {
            $this->email = $email;
        }
    
        /**
         * Execute the job.
         *
         * @return void
         */
        public function handle()
        {
            Mail::raw('测试队列', function($message) {
                $message->to($this->email);
            });
        }
    
    }
    
    

    3.推送任务到队列

    <?php
    
    namespace AppHttpControllers;
    
    use IlluminateHttpRequest;
    use AppJobsSendEmail;
    use Mail;
    
    class TestController extends Controller{
        public function queue(){
            // dispatch 的参数是你刚刚创建的任务类 /jobs 目录下的类
            dispatch(new SendEmail('3233824562@qq.com'));
        }
    }
    
    • 因为 Controller 类use了 DispatchesJobs 这个 trait 所以能够直接使用 dispatch 方法
    • 如果需要在模型中用 dispatch 方法,请手动 use 这个 trait
    • 在浏览器中访问这个控制器方法, 会发现在 jobs 这个数据表中多了一条记录

    4.运行队列监听器

    php artisan queue:listen
    
    • 如果执行成功, jobs 中的数据表就没有数据了
    • 如果执行失败,可以在日志中查看原因, 默认是 storage/logs/laravel.log

    4.处理失败的任务

    在任务失败时, 你可以选择 清除失败的任务或者 重新执行失败的任务

    • 查看所有失败的任务, 会将所有失败的任务查询出来输出到命令行
    php artisan queue:failed
    
    重新执行失败任务
    • 重新执行指定id失败的任务
    php artisan queue:retry 1
    

    此处的 1 失败任务表中的任务的 id, 表示重新执行指定id失败任务

    • 重新执行所有的失败任务
    php artisan queue:retry all
    
    清除失败任务
    • 清除指定id失败的任务
    php artisan queue:forget 2
    

    此处的 2 失败任务表中的任务的 id, 表示清除指定id失败任务

    • 清除所有失败的任务
    php artisan queue:flush
    
  • 相关阅读:
    idea配置web项目启动的详细说明
    mybatis如何防止sql注入(1)
    SQL基础(3)
    SQL基础(2)
    SQL基础(1)
    SpringMVC—对Ajax的处理(含 JSON 类型)(3)
    SpringMVC 之URL请求到Action的映射(1)
    Oracle 多表查询(2)
    Oracle 多表查询(1)
    mysql查询最近30天、7天、每天、昨天、上个月的记录
  • 原文地址:https://www.cnblogs.com/liaohui5/p/10581638.html
Copyright © 2020-2023  润新知