Laravel中简单使用队列加快访问速度

无道 2019-10-13 0 条评论 编程相关 阅读472 手机阅读

前言

  • Laravel 队列服务为各种不同的后台队列提供了统一的 API
  • 允许推迟耗时任务(例如发送邮件)的执行,从而大幅提高 web 请求速度

总而言之,队列就是在后台执行一些耗时的任务,从而让前台访问速度加快。比较典型的例子就是发邮件。特别是同一时间发送多个邮件时。

程序员啊,就是折腾的命啊!

步骤

迁移队列需要的表

才开始尝试使用队列,还是简单点,使用数据库就行。

修改配置文件

.env文件里默认有:

QUEUE_CONNECTION=sync,也即默认使用的是sync驱动,我们这里改为database 【数据库】

截图-1570945217

运行迁移文件

php artisan queue:table

截图-1570878533

以上是队列所需数据表

php artisan queue:failed-table

截图-1570878566

以上是队列任务运行失败的记录表

多了两张表,好了,不用管了。

截图-1570878624

执行迁移文件

php artisan migrate

截图-1570878674

编写任务类

1、创建一个任务类

php artisan make:job SendSeo

截图-1570878780

数据库就多了两张表:

截图-1570878827

2、修改创建的任务类

app/Jobs/SendSeo.php

其中handle方法就是处理任务的具体逻辑操作。

截图-1570879266

public function handle()
{
    Log::info('task executed!!!!');
}

这里就记录一条日志就行

如果有额外的参数需要填写,那么就在构造方法里面传入即可。

截图-1570879010

推送队列

我这里建立了一个测试控制器,TestController,里面有个测试方法test,Web路径是:http://127.0.0.1/test/test

你的是多少就是多少,我们这里就是为了触发队列

public function test()
{
    $this->dispatch(new SendSeo());
}

访问,然后看数据库:

截图-1570879313

还没完,还要后台监听

php artisan queue:listen --tries=3

截图-1570879416

看样子,成功啦。我们去日志文件看一下:

截图-1570879446

莫问题。

然后看数据库:

截图-1570945273

数据库清空了,因为任务已经执行了。

解答下小白(以前的我)的问题:

1、必须要后台执行?也即php artisan queue:listen --tries=3

肯定的啊,都是后台的队列了,那肯定就是后台执行啊。所以,laravel完全不适合在虚拟机里面运行,无论从composer包的安装还是其他方面来说。

2、在Linux中,你通过ssh后台执行 php artisan queue:listen --tries=3

需要在后面加上一个&

也即:

php artisan queue:listen --tries=3 &

为什么?因为你不想你退出ssh,它就不后台执行了嘛?

附命令

附上一些常用命令

1、运行队列监听器

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

2、处理失败的任务

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

  • 查看所有失败的任务, 会将所有失败的任务查询出来输出到命令行

    php artisan queue:failed

3、重新执行失败任务

  • 重新执行指定id失败的任务

    php artisan queue:retry 1

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

  • 重新执行所有的失败任务

    php artisan queue:retry all

4、清除失败任务

  • 清除指定id失败的任务

    php artisan queue:forget 2

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

  • 清除所有失败的任务

    php artisan queue:flush
全文完 [
有帮助?打赏
支付宝打赏
微信打赏
]
这篇文章还没有评论呢~
点击刷新/生成验证码