I'm trying to automate a process composed from multiple jobs. Every job had a goal, so I'm running a global job who is responsible for creating child jobs.
- Job-1
Global Job -> - Job-2
- Job-3
- Job-4
I want to run them one after another, for know the queue process run all the four jobs in the same time and this is what I don't want.
Is it about configration ? otherwise what it the prefect way to handle this kind of needs
This is what y Global job class looks like
<?php
namespace App\Jobs;
use App\Models\Objects;
use App\Helpers\UtilsHelper;
use Illuminate\Support\Facades\Log;
use App\Services\JobsLimitControler;
/**
* This job will have the responsability to create other ones
*/
class AutoImport extends Job
{
/**
* Job key
* @var string $key
*/
public $key;
/**
* Job type
* @var string $jobType
*/
public $type = 'auto-import';
/**
* Job type
* @var string $jobType
*/
public $title = 'Automatic import';
/**
* Job params array
* @var array $params
*/
public $params;
/**
* Location
* @var Objects $object
*/
public Locations $object;
/**
* The number of seconds after which the job's unique lock will be released.
*
* @var int
*/
public $uniqueFor = 600;
/**
* The unique ID of the job.
*
* @return string
*/
public function uniqueId()
{
return $this->key;
}
/**
* Create a new job instance.
* @param string $id Job id
* @param Objects $object
*/
public function __construct(string $id,Objects $object)
{
# Job key attribute
$this->key = $id;
# Preparing job to be trackable
$this->prepareStatus(['key' => $id]);
# Location instance
$this->object = $object;
}
/**
* Execute the job
*/
public function handle()
{
try{
# First we verify if the object is well setted
if($this->object){
$this->callJobOne();
$this->callJobTwo();
$this->callJobThree();
$this->callJobFour();
}else{
Log::channel('auto-import')->info("some log");
}
}catch(\Exception $e){
# Mark the job as failed
$this->fail($e);
# We throw the error to be intercepted by the job tracker
throw $e;
}
}
}
CodePudding user response:
You can use Laravel's Job Batches for grouping purpose. https://laravel.com/docs/8.x/queues#job-batching
And Job Chaining to progress sequentially. https://laravel.com/docs/8.x/queues#job-chaining
You may define a set of chained jobs within a batch by placing the chained jobs within an array