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.编写任务类

  • 创建任务类(我这里以发送邮件为例), 如果你还不会用laravel发送邮件请看 https://www.jianshu.com/p/5f4b689b3954
php artisan make:job  SendEmail
  • 编写任务类
email = $email;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        Mail::raw('测试队列', function($message) {
            $message->to($this->email);
        });
    }

}

3.推送任务到队列

  • 因为 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

你可能感兴趣的:(laravel 队列的使用)