RetryBatchCommand.php
TLDR
The file RetryBatchCommand.php
is a class file that defines the RetryBatchCommand
class in the Illuminate\Queue\Console
namespace. It extends the Command
class and implements the Isolatable
interface. It provides a command for retrying failed jobs within a batch in a queueing system.
Methods
handle
Executes the console command. It retrieves the batch with the given ID from the batch repository and retries its failed jobs by calling the queue:retry
command for each failed job. If the batch is not found or does not contain any failed jobs, an error message is displayed. Upon completion, an info message is displayed.
isolatableId
Returns the custom mutex name for an isolated command. It retrieves the id
argument provided in the command signature.
<?php
namespace Illuminate\Queue\Console;
use Illuminate\Bus\BatchRepository;
use Illuminate\Console\Command;
use Illuminate\Contracts\Console\Isolatable;
use Symfony\Component\Console\Attribute\AsCommand;
#[AsCommand(name: 'queue:retry-batch')]
class RetryBatchCommand extends Command implements Isolatable
{
/**
* The console command signature.
*
* @var string
*/
protected $signature = 'queue:retry-batch {id : The ID of the batch whose failed jobs should be retried}';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Retry the failed jobs for a batch';
/**
* Execute the console command.
*
* @return int|null
*/
public function handle()
{
$batch = $this->laravel[BatchRepository::class]->find($id = $this->argument('id'));
if (! $batch) {
$this->components->error("Unable to find a batch with ID [{$id}].");
return 1;
} elseif (empty($batch->failedJobIds)) {
$this->components->error('The given batch does not contain any failed jobs.');
return 1;
}
$this->components->info("Pushing failed queue jobs of the batch [$id] back onto the queue.");
foreach ($batch->failedJobIds as $failedJobId) {
$this->components->task($failedJobId, fn () => $this->callSilent('queue:retry', ['id' => $failedJobId]) == 0);
}
$this->newLine();
}
/**
* Get the custom mutex name for an isolated command.
*
* @return string
*/
public function isolatableId()
{
return $this->argument('id');
}
}