记录一个导致队列无法正常执行的问题
不知道这算不算 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 协议》,转载必须注明作者和本文链接
推荐文章: