流明防止队列中的重复作业

Lumen prevent duplicate job in a queue

使用 lumen 8.2.3 我只是想将一个独特的作业分派到队列中。在 app/Console/Kernel 中,我已向 $schedule->job(new myJob(), 'high')->everyMinute(); 发送了一个每分钟运行一次的时间表。 在工作本身中,我在 myJob class 中添加了 ShouldBeUnique 接口 class 我什至添加了

public function uniqueId() { 
   return $this->process->id();
}

当我的 cron 作业运行 php artisan schedule:run 时,这仍在队列中创建多个作业,导致我的 3 名工人同时接受这两个作业并导致问题。

https://laravel.com/docs/8.x/queues#unique-jobs 说得很清楚

"Sometimes, you may want to ensure that only one instance of a specific job is on the queue at any point in time. You may do so by implementing the ShouldBeUnique interface on your job class. This interface does not require you to define any additional methods on your class:"

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Throwable;

class myJob implements ShouldQueue, ShouldBeUnique
{
    use InteractsWithQueue, Queueable, SerializesModels;
    
    private $process;

    public function __construct($process){
       $this->process=$process;
    }
    public function uniqueId() { 
       return $this->process->id();
    }
    
    
    public function handle()
    {
       //some code here
    }

    public function failed(Throwable $exception)
    {
    // Send user notification of failure, etc...
    }
  }

难道就没有办法防止吗?谢谢

所提供的代码几乎无法反映您所写的内容;根本没有工作。

声明应如下所示:

class SomeJob implements ShouldQueue, ShouldBeUnique
{
    use InteractsWithQueue, Queueable, Dispatchable;
    ...
}

奇怪这是如何修复的,但我所做的是将版本从 8.2.4 更改为 8.3.4 并且 shouldBeUnique 工作看起来像 8.3.4 中引入的错误