php加入队列失败,Laravel队列使用中踩的坑,不报错但是队列一直再重试
使用方案
使用的Laravel框架提供的队列服务,使用artisan命令来监听队列
使用的是事件队列,定义的Event和Listener如下:
TestEvent为触发的事件类,
TestListener为事件的监听类:
并且定义事件与监听之间的关联关系:
在我触发事件的时候使用\Event::fire(new TestEvent($product_info));
发现问题
在本地测试的时候没有发现任何异常队列,但是在线上环境却出现了很多奇怪的队列,队列一直在重试而且laravel.log日志文件中却没有看到记录有任何的异常日志。
既然没办法直观看到错误消息,只有老老实实跟一下源码了,首先从队列的监听进程开始找。
解决过程
首先找到queue:work命令的源头,这个文件就是
Illuminate\Queue\Console\WorkCommand
这里的fire函数就是队列监听的开始执行者。
紧跟下去你就会发现fire() -> runNextJob() -> \Illuminate\Queue\Work::runNextJob()。
在process函数中你会发现这里竟然使用了tryCatch来捕捉异常,
然后这里的异常处理是使用一个Event事件来处理的,
意思就是说,当Job队列发送异常时这里的异常消息必须是要你监听了两个队列错误触发的事件才行。
于是乎只能自己再去写监听类了。
在这里再去对队列的重试次数做限制,超出限制后删除队列或延迟处理。
通过对队列错误事件的监听我才知道,原来是由于在我的事件中使用了Model模型,再进入队列执行的时候,
会使用Model的主键再去反查一次模型数据,而且使用的是firstOrFail方法,可能是由于之前的一些数据被物理删除
了导致找不到的原因,这这里就报错了,而且没有删除的机制,所以队列一直在重试!
好了,终于修复了这个坑了!
总结
最后,还是以文字简单描述下这个监听工作,方便SEO啊!
使用Laravel队列时一定要记得监听
Illuminate\Queue\Events\JobExceptionOccurred;
Illuminate\Queue\Events\JobFailed;
两个事件不然发生错误队列就删除不了了,如果是在执行队列中handle函数中
一定要记得及时删除队列,使用delete()方法即可!
更多关于Laravel队列的问题可以给我留言或评论!
php加入队列失败,Laravel队列使用中踩的坑,不报错但是队列一直再重试相关推荐
- 树莓派4 安装OPENCV3全过程(各种踩坑和报错)
树莓派4 安装OPENCV3全过程(各种踩坑和报错) 说明 第一步更换源 第二部:存储空间的一些说明和操作 第三步:增加交换空间 第四步:下载工具及包 第五步:设置编译编译参数 第六步:开始编译 第六 ...
- php的old函数,laravel单元测试之phpUnit中old()函数报错解决
php 的 laravel单元测试之phpUnit中old()函数报错解决 前言 最近在做laravel单元测试.遇到了一个问题: 当添加的view里面使用old()函数时就会报错,正常url访问没问 ...
- PHP获取input中的值相同报错,laravel单元测试之phpUnit中old()函数报错解决_php实例...
前言 最近在做laravel单元测试.遇到了一个问题: 当添加的view里面使用old()函数时就会报错,正常url访问没问题,但是在phpUnit中就报错 错误原因: exception 'Runt ...
- elasticsearch+kibana使用中踩的坑,持续更新中。
1存进elasticsearch中的数据在kibana的discover中看不到,但是通过_id在Dev Tools可以查到,也可以直接用python取出来.最后发现存进去的时候没加时间戳. doc ...
- video标签使用中踩的坑
最近公司需要在项目中添加视频,并且是用angularjs写的项目,中间遇到了一些坑,在此记录下来. 1.有些html viedo播放视频有声音但是没图像 1.1.MP4有3中编码格式,mpg4(xdi ...
- laravel用redis保存session遇到的坑,没报错,但redis-cli就是查不到
laravel用redis保存session遇到的坑, 配置redis存储session流程是这样的 在.evn文件中把session驱动和连接改为了redis的 如下: SESSION_DRIVER ...
- Laravel 5.4: 特殊字段太长报错 420000 字段太长
laravel 5.4 改变了默认的数据库字符集,现在utf8mb4包括存储emojis支持.如果你运行MySQL v5.7.7或者更高版本,则不需要做任何事情. 当你试着在一些MariaDB或者一些 ...
- laravel路由不生效,404,除了/ 都不行,关于nginx环境下laravel除了默认路由都出现404报错的处理方法...
其实出现这个问题只会出现在laravel被部署在二级目录中,其原因是,除了请求根目录/ (http://www.xxx.com/public/),会请求public/index.php 你在浏览器输入 ...
- idea项目依赖导入失败_解决idea导入项目后依赖报错问题
1.在idea首页 Confige-->setting-->build,execution,deployment-->buildTool-->maven-->work o ...
最新文章
- rest-framework:认证组件
- POJ3481(待完善版本,请看注释)
- 电影中的出品人,制片人
- Python 第三方模块之 pdfkit
- mba学什么书_MBA的完整形式是什么?
- 【BP神经网络】使用反向传播训练多层神经网络的原则+“常见问题”
- mouseover和mouseout多次触发解决方法(兼容ie和firefox)(转)
- 【MVC】使用FormCollection获取Form表单数据
- Linux 下面解压.tar.gz 和.gz文件解压的方式
- 【收集】个人认为比较实用的电脑工具软件(附带安装包下载)
- H5制作平台开发游戏成本解析
- 鼠标指针点击光圈特效_PC端手势操作神器——鼠标手势
- 每日excel学习之分类汇总和数据有效性
- WampServer常见问题集锦
- 第十四届蓝桥杯模拟赛第一期试题【Java解析】
- Java组各任务工作流程
- php rsa加密实例,php实现RSA加密类实例,phprsa加密实例_PHP教程
- 新闻发布系统之界面分页+评论功能
- 推荐给广大MM们-化妆品品牌中英文对照
- 易经读书笔记21火雷噬嗑
热门文章
- 低效能人士的七个坏习惯
- HDU 1114 iggy-Bank(完全背包)
- [Flex] ButtonBar系列——垂直布局
- perl中的uc与lc函数
- Java高并发之CountDownLatch源码分析
- 2021年广东高考各科成绩查询,2017年广东高考成绩五种查询方式一览
- APT linux必知必会
- 【星云测试】开发者测试(2)-采用精准测试工具对J2EE Guns开发框架进行测试
- 如何部署Windows Server 2016 中的Storage Spaces Direct超聚合解决方案
- Android--Fragment基本介绍