执行php artisan queue:work
后任务始终在pending里面不执行. 这个问题很莫名奇妙找不到问题
后来发现是redis库的问题
在job文件构造方法加入 Redis::select(0);
2022年7月21日更新
不是redis的问题(下面有最新更新), 是horizon
的问题, 需要再执行php artisan horizon
重要的事情说三遍
执行: php artisan horizon
执行: php artisan horizon
执行: php artisan horizon
/**
* Create a new job instance.
*
* @return void
*/
public function __construct(array $data)
{
Redis::select(0);
}
2022年8月6日 更新
突然又莫名其妙的不执行了, 经过一天的排查, 发现在php artisan queue:work
启动的时候会 执行框架的一些文件, 而我在文件里面 切换了redis 10库. 所以消费队列就去 redis 10库进行消费, 而我队列的数据都存储在redis 0库, 导致队列一直在pending不执行
2022年9月30日 更新 (未解决)
项目正常跑了3个月. 突然在毫无征兆的情况下出现: Model在队列里面查询数据为空(实际情况是该数据一直存在), 经过大量的测试复现了下面2种情况
第一种情况: $order = Order::query()->where(['id' => $order_id])->first();
执行之后 $order
为空, 2秒后再次执行, $order
有值
第二种情况: $order = Order::query()->where(['id' => $order_id])->first();
执行之后 $order
有值, 隔几分钟后再次执行 $order
为空
只有在队列里面才出现, 其它业务是正常的. mysql 没有报错. 队列也没有报错.
文章传送门: Model在队列查询数据为空