Как поставить в очередь несколько одинаковых экземпляров задания, но разные аргументы в Laravel? - PullRequest
0 голосов
/ 14 января 2020

Я планирую работу в очереди, и что-то не так с документацией (или, может быть, я не могу понять это достаточно), это мой первый 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)? Будет ли мой код работать? Есть ли альтернативы для достижения желаемого результата?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...