laravel队列的详解使用

in Laravel with 0 comment

队列

队列的使用场景,当我们需要执行一些比较耗时或者容易出来故障的任务的时候,这个时候就需要 队列 了 , 故名思义:排队等待执行的列表任务

  1. 环境配置 :

    日常的配置驱动 :

     database
     redis
     sqs
    

    在这里我使用的是redis , 所以我们要在 .env 文件中 修改

     QUEUE_DRIVER=redis
    
     REDIS_HOST=127.0.0.1
     REDIS_PASSWORD=null
     REDIS_PORT=6379
    
  2. 简单使用

    创建并使用队列

    在 App\Jobs 中创建

     ` php artisan make:job UpdateUserNameJob`
    


  1. 详细介绍其他用法

    • 创建任务类

      在上面的我已经介绍了如何进行创建, php artisan make:job UpdateUserNameJob

    • 任务分发

        `UpdateUserNameJob::dispatch()`
      
    • 延迟分发

        UpdateUserNameJob::dispatch()
        ->delay(now()->addMinutes(10)); // delay 接受一个 datetime 参数
      
    • 任务链

        \App\Jobs\UpdateUser1NameJob::withChain([                                                            
            new \App\Jobs\UpdateUser1NameJob,                                                        
            new \App\Jobs\UpdateUser2NameJob,                                                        
            new \App\Jobs\UpdateUser3NameJob,                                                        
        ])->dispatch();   // 
      
        // 可以增加指定链接 或者 分发到指定队列名  allOnConnection 和 allOnQueue
      
    • 队列的优先级

        dispatch((new Job)->onQueue('high'));
      
    • 重新队列

        php artisan queue:restart
      

      当然 , 有时候我们需要对我们的一些错误的任务进行处理,laravel 提供了 failed 方法

                // job
                ... 
                public function handler(){
      
                }
                public function failed(){
                    // 发送失败通知
                }
            
        同时任务失败会触发一个事件
                
                // AppServiceProvider 
      
                ....
                public function boot () {
                    Queue::failing(function (JobFailed $event) {
                    // $event->connectionName
                    // $event->job
                    // $event->exception
                    });
      
                ...
      
        通过 Queue 门面提供的 before 和 after 方法可以在任务被处理之前或之后指定要执行的回调。这些回调可用来记录日志或者记录统计数据。
      


-- 原创 转载请注明出处

Comments are closed.