laravel5.6使用队列,亲测有效

最近在做一个爬虫的一个模块,遇到了当你爬取100多张网络图片的时候可以下到50~90多张发现会出现500错误
在这里插入图片描述
问了群里面的大佬说是请求过长了导致的,或者是内部代码错误,前面的都可以下载,就是时间长了就会出现错误,然后请教群里的大佬解决方案,有redis的队列的,laravel队列的,我是用laravel框架的队列现在贴跟步骤代码,先创建一个laravel项目,创建项目跟运行省略
**

工具/原料

**
laravel5.6 & composer & lnmp环境

php7.2.x+

方法/步骤

首先检查自己的环境是否符合要求
php -v

  composer --version

在这里插入图片描述
我的是用数据库队列的所以需要改配置文件.env文件的 QUEUE_DRIVER=database
在这里插入图片描述
我们使用laravel提供的脚手架生成处理队列的任务类DemoQueue

  php artisan make:job  DemoQueue

这个时候会在你的项目下面多了一个Jobs目录,最终生成的任务处理文件就在目录下面
在这里插入图片描述
处理队列的任务类,但是现在我们还没有要处理的队列,那么我们接着使用laravel提供的脚手架生成队列使用的数据库

   //查看laravel提供了那些脚手架功能

   php artisan 

   //使用php artisan queue:table 生成数据队列驱动的表结构

  php artisan queue:table

  //执行数据库迁移也就是创建表

  php artisan migrate

执行完上面的动作之后,如果你前面的数据配置正确,那么你应该和我一样会看到图片上的效果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
数据表也有,那么模拟几条队列数据到队列里面去,那么就随便创建一个控制来模拟几条数据到队列服务里面去.

  //生成控制器

  php artisan make:controller DemoController

 //启动一个内部虚拟服务器

 php artisan serve

 //配置web.php的请求路由

 Route::get('demo','DemoController@demo');

//新开一个窗口用curl请求

curl -i localhost:8000/demo

如果不出意外的话,这个时候jobs表里面就有了三条待处理的消息了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
消费队列,前面都好理解就是在消费队列的时候,有几个小坑大家要注意,因为在消费队列的时候谁都不能保证服务就一直在如期执行,总会发生点什么意外.有人说可以用try catch捕获,但是不是这样的,即使你在DemoQueue里面捕获,你也拿回去不到异常信息, 跟踪源码发现,是在队列的接口在进行了捕获, 那我们先不考虑错误的情况, 就假如一切都很顺利的执行了

 //执行这个命令消费队列

 php artisan queue:work --queue=demo

在这里插入图片描述
出现这个说明它已经执行了

如果出现错误的话
在这里插入图片描述

这个表的jobs表的数据也会被删除在这里插入图片描述
但是数据会记录在
在这里插入图片描述
在这里插入图片描述

   //执行如下命令找回处理失败的队列

   php artisan queue:all 

后面可以跟failed-table表的id,如果跟id的话, 只会回复对应id值的失败队列到jobs表中, 如果跟all的话全部失败的队列都会重新放回jobs表中

这是我简化版的 转载了 https://blog.csdn.net/william_n/article/details/103425410,方便自己记忆所以写这篇博客,我自己亲自测试 是成功的,最后下载网络图片也可以比之前下得完,貌似还更快,有机会有学习redis队列,不喜勿喷,谢谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值