前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >记录一次 laravel 项目队列拥堵的问题

记录一次 laravel 项目队列拥堵的问题

作者头像
句小芒
发布2022-12-29 18:07:29
4350
发布2022-12-29 18:07:29
举报

项目的队列使用database 作为队列驱动,在任务入队之后发现并未生效。所以对问题进行排查。

  1. 首先查看 failed_jobs 表,发现并没有失败的任务生成记录,然后查看jobs 表,发现确实已经入了 jobs 表的记录。 查看项目日志,如下
代码语言:javascript
复制
Numeric value out of range: 1264 Out of range value for column 'attempts' at row 1 
(SQL: update `yn_jobs` set `reserved_at` = 1585808364, `attempts` = 256 where `id` = 1331)
 in /usr/local/nginx/html/yinuo-crm-api/vendor/illuminate/database/Connection.php:664

发现是由于尝试次数引起的,查看对应id 的数据库记录,查看payload 字段,

代码语言:javascript
复制
{"displayName":"App\\Jobs\\OrderMark","job":"Illuminate\\Queue\\CallQueuedHandler@call","maxTries":null,"timeout":null,"data":{"commandName":"App\\Jobs\\OrderMark","command":"O:18:\"App\\Jobs\\OrderMark\":5:{s:10:\"\u0000*\u0000orderid\";i:13658;s:6:\"\u0000*\u0000job\";N;s:10:\"connection\";N;s:5:\"queue\";N;s:5:\"delay\";i:21820635;}"}}

发现maxTries 和timeout 字段都是null,这个时候该任务会无限期执行,导致队列堵塞。 找到问题,进行解决,在对应的job 文件下添加最大尝试次数的参数

代码语言:javascript
复制
class DataMark extends Job {
    public $tries = 5;   //添加最大尝试次数
    .....
	public function __construct($datas){
	.......
	}
	public function handle(){
	    	.......
		return true;
	}
}

最后删掉那条一直在重试的任务,新入队的任务都有重试次数的限制了,不会出现一直重试导致拥堵的情况啦。

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-04-02,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com