前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Laravel中简单使用队列加快访问速度

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

作者头像
无道
发布2019-11-13 16:30:27
1.6K0
发布2019-11-13 16:30:27
举报
文章被收录于专栏:无道编程

前言

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

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

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

步骤

迁移队列需要的表

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

修改配置文件

.env文件里默认有:

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

截图-1570945217
截图-1570945217

运行迁移文件

代码语言:javascript
复制
php artisan queue:table
截图-1570878533
截图-1570878533

以上是队列所需数据表

代码语言:javascript
复制
php artisan queue:failed-table
截图-1570878566
截图-1570878566

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

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

截图-1570878624
截图-1570878624

执行迁移文件

代码语言:javascript
复制
php artisan migrate
截图-1570878674
截图-1570878674

编写任务类

1、创建一个任务类

代码语言:javascript
复制
php artisan make:job SendSeo
截图-1570878780
截图-1570878780

数据库就多了两张表:

截图-1570878827
截图-1570878827

2、修改创建的任务类

app/Jobs/SendSeo.php

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

截图-1570879266
截图-1570879266
代码语言:javascript
复制
public function handle()
{
    Log::info('task executed!!!!');
}

这里就记录一条日志就行

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

截图-1570879010
截图-1570879010

推送队列

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

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

代码语言:javascript
复制
public function test()
{
    $this->dispatch(new SendSeo());
}

访问,然后看数据库:

截图-1570879313
截图-1570879313

还没完,还要后台监听

代码语言:javascript
复制
php artisan queue:listen --tries=3
截图-1570879416
截图-1570879416

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

截图-1570879446
截图-1570879446

莫问题。

然后看数据库:

截图-1570945273
截图-1570945273

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

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

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

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

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

需要在后面加上一个&

也即:

代码语言:javascript
复制
php artisan queue:listen --tries=3 &

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

附命令

附上一些常用命令

1、运行队列监听器

代码语言:javascript
复制
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
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-10-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 步骤
    • 迁移队列需要的表
    • 编写任务类
    • 推送队列
    • 附命令
    相关产品与服务
    数据库
    云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档