Я планирую работу в очереди, и что-то не так с документацией (или, может быть, я не могу понять это достаточно), это мой первый Laravel проект, и я не уверен, что это сработает.
Работа
class FooJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $foo_id;
public function __construct($foo_id)
{
$this->foo_id = $foo_id;
}
public function handle()
{
dd('foo id is '.$this->foo_id);
return null;
}
}
В моем Ядре это есть в моем расписании функций ...
// honestly i dont know which comes first, everyFiveMinutes() or withoutOverlapping()
$schedule->job(new FooJob(1))->everyFiveMinutes()->withoutOverlapping();
$schedule->job(new FooJob(2))->everyFiveMinutes()->withoutOverlapping();
$schedule->job(new FooJob(3))->everyFiveMinutes()->withoutOverlapping();
Я пытаюсь отправить ту же работу с разными аргументами все одновременно без дубликатов. Если, например, FooJob(1)
все еще работает, а другой FooJob(1)
пытается выполнить - мне нужно пропустить это. Если FooJob(1)
все еще выполняется и FooJob(2)
пытается быть выполненным - мне нужно выполнить.
Что я не понимаю, так это метод withoutOverlapping
. В документах пример withoutOverlapping
предназначен только для $schedule->command()
. Я не уверен, что это работает для $schedule->job.
В моем исследовании withoutOverlapping
создает файл взаимного исключения и будет учитывать только сигнатуру и / или класс, а не параметры. Однако это определяется только с помощью $schedule->command
. Я не уверен, относится ли это к $schedule->job
. Будут ли перекрываться значения FooJob(1)
и FooJob(2)
? Будет ли мой код работать? Есть ли альтернативы для достижения желаемого результата?