zoukankan      html  css  js  c++  java
  • 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
    
  • 相关阅读:
    部署高可用keepalived组件
    Jenkins-Pipeline 流水线发布部署项目
    kubernetes Dashboard 使用RBAC 权限认证控制
    无法找到msvcp90.dll的一个碰巧解决办法
    QQ 聊天机器人小薇 1.0.1 发布!
    QQ 聊天机器人小薇 1.0.1 发布!
    Android Studio 小技巧(1):如何导入AAR文件
    <Android 基础(七)> DrawerLayout and NavigationView
    编写xml文件的几个注意事项
    <Android 基础(六)> ActionBar
  • 原文地址:https://www.cnblogs.com/liaohui5/p/10581638.html
Copyright © 2011-2022 走看看