Синхронизация заданий Laravel

#php #laravel #queue #jobs

#php #laravel #очередь #Вакансии

Вопрос:

У меня есть 4 метода: A, B1, B2, B3, и я хочу инкапсулировать их выполнение в отдельные задания. A генерирует результат, который использует B, поэтому A должен быть завершен перед запуском B, и если A завершается неудачно, не запускайте B. Также по соображениям производительности я не хочу, чтобы B1, B2, B3 выполнялись одновременно, но последовательно, запускайте B2, когда B1 завершен, но они не обмениваются результатами, поэтому, если какой-то B завершается неудачей, запустите другой нормально. Я не хочу никаких повторных попыток при сбое, только по одной попытке для каждого. Итак, порядок выполнения — A-> B1-> B2->B3.

В документах мало что говорится о механизмах синхронизации, поэтому не очевидно, как это реализовать. Я нашел обработчик Queue::after, который, как я понимаю, срабатывает при каждом завершении задания, как вы фильтруете, какое задание? По классу if(is_a($event->job , 'JobAClass'))... ?

https://laravel.com/docs/5.3/queues#job-events

     Queue::after(function (JobProcessed $event) {
        // $event->connectionName
        // $event->job
        // $event->job->payload()
    });
  

Комментарии:

1. Мой вопрос может показаться глупым, но зачем вам нужно иметь 4 отдельных задания, когда все 4 метода выполняются один за другим?

2. Эти функции работают долго, выполняют множество http-запросов и требуют много времени для выполнения задач, таких как рендеринг изображений, что делает их рабочими — отдельные процессы обеспечивают дополнительный уровень надежности по сравнению с одним длительным вызовом скрипта.

3. Надежность повышается за счет правильной обработки пользовательского ввода, исключений и операций ввода-вывода. Вы не получаете никакой надежности, разбивая длинную задачу на две более короткие задачи, выполняемые последовательно. Но я понимаю, что это не то, что вы пришли сюда искать.

4. Если B1 получает необработанное исключение, B2 и B3 не будут выполняться, поскольку задания B1, B2, B3 независимы. Порядок и условия выполнения могут измениться в будущем. Длинные скрипты — плохая практика.