我有一个 cron,它在一次执行时会触发数千个 cron。因此,在作业执行之前,我还有一些其他文件,可以使用相同的参数调用相同的作业。我想阻止这种情况发生。
所以基本上,在触发队列之前,系统应该检查队列中是否存在具有相同参数的相同作业。我怎样才能做到这一点?
谢谢你。
来自 Laravel 文档:
有时,您可能希望确保特定的实例只有一个 作业在任何时间点都在队列中。您可以通过以下方式进行操作: 在您的作业类上实现 ShouldBeUnique 接口。
更具体地说:
在某些情况下,您可能想要定义一个特定的“键”来使 该作业是唯一的,或者您可能想要指定一个超时时间,超过该超时时间 工作不再保持独特。为了实现这一点,您可以定义 uniqueId 和 uniqueFor 作业类的属性或方法:
<?php
use App\Models\Product;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Contracts\Queue\ShouldBeUnique;
class UpdateSearchIndex implements ShouldQueue, ShouldBeUnique
{
/**
* The product instance.
*
* @var \App\Product
*/
public $product;
/**
* The number of seconds after which the job's unique lock will be released.
*
* @var int
*/
public $uniqueFor = 3600;
/**
* Get the unique ID for the job.
*/
public function uniqueId(): string
{
return $this->product->id;
}
}
因此,您只需定义如何确定您的特定工作的独特性,然后就可以开始了。