记录一个导致队列无法正常执行的问题
不知道这算不算 Lavavel 需要改进的一个小问题,当队列实现了 ShouldBeUnique 接口时,如果这个队列类没有定义 uniqueId() 方法,也没有定义 uniqueId 属性时,那么这个任务将不会被派发执行。
具体现象就是当我们触发这个队列时,会执行队列的构造方法,但是不会触发任务执行,也不会报错。
相关源码 Illuminate\Bus\UniqueLock.php
/**
* Generate the lock key for the given job.
*
* @param mixed $job
* @return string
*/
protected function getKey($job)
{
$uniqueId = method_exists($job, 'uniqueId')
? $job->uniqueId()
: ($job->uniqueId ?? '');
return 'laravel_unique_job:'.get_class($job).$uniqueId;
}
在这里我们能看到,如果既没有 uniqueId() 方法,也没有 uniqueId属性,那么 uniqueId 就是一个空字符串,那每个任务的唯一编号就是一样的了。
个人感觉,这部分要么应该 throw 一个异常,提示因为是现实了 ShouldBeUnique 接口,所以必须定义 uniqueId 方法或属性。要么正是有点懵,文档中的描述也是说只需要实现 ShouldBeUnique 即可,可以不用增加任何额外的方法。
奇怪 奇怪 真奇怪
本作品采用《CC 协议》,转载必须注明作者和本文链接



关于 LearnKu
推荐文章: