检查 Laravel 中具有相同参数的重复作业

问题描述 投票:0回答:1

我有一个 cron,它在一次执行时会触发数千个 cron。因此,在作业执行之前,我还有一些其他文件,可以使用相同的参数调用相同的作业。我想阻止这种情况发生。

所以基本上,在触发队列之前,系统应该检查队列中是否存在具有相同参数的相同作业。我怎样才能做到这一点?

谢谢你。

laravel redis queue jobs
1个回答
0
投票

来自 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;
    }
}

因此,您只需定义如何确定您的特定工作的独特性,然后就可以开始了。

© www.soinside.com 2019 - 2024. All rights reserved.