Laravel Queue\ShouldBeUnique 和 Queue\Middleware\WithoutOverlapping 之间有什么区别?

Ben*_*eth 7 jobs scheduling laravel laravel-8

我的工作不知何故被多次解雇。我希望这项工作只开始一次。如果任何其他尝试在作业已经在队列中时运行该作业,我希望这些运行中止。

我已阅读 Laravel 8 文档,但不知道是否应该使用:

我相信第一个会中止后续运行该作业的尝试,而第二个则将其保留在队列中,只是确保它在第一个作业完成之前不会运行。有人能证实吗?

Ben*_*eth 14

通过尝试在控制台窗口中运行同一作业的多个实例在本地进行确认。

实施Queue\ShouldBeUnique在我的工作类中

而添加->withoutOverlapping()到文件中我的工作参考的末尾app\console\kernel.php只会阻止它同时运行。如果作业已经在运行,它不会中止该作业。

  • 这里需要注意的一点是,如果您在作业类本身中使用 `->withoutOverlapping()` 作为中间件而不是 `app\console\Kernel.php`,那么您还可以附加 `->dontRelease( )` 到它,它不会被释放回队列并且将被丢弃,使得 `ShouldBeUnique` 和 `withoutOverlapping()` 在作业类中有点相同。我认为“dontRelease()”不能在“Kernel.php”中使用。它只能在作业中间件中使用。 (4认同)