项目的队列使用database 作为队列驱动,在任务入队之后发现并未生效。所以对问题进行排查。
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 字段,
{"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 文件下添加最大尝试次数的参数
class DataMark extends Job {
public $tries = 5; //添加最大尝试次数
.....
public function __construct($datas){
.......
}
public function handle(){
.......
return true;
}
}
最后删掉那条一直在重试的任务,新入队的任务都有重试次数的限制了,不会出现一直重试导致拥堵的情况啦。