Viewing file: RetryCommand.php (2.14 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace Illuminate\Queue\Console;
use Illuminate\Support\Arr; use Illuminate\Console\Command; use Symfony\Component\Console\Input\InputArgument;
class RetryCommand extends Command { /** * The console command name. * * @var string */ protected $name = 'queue:retry';
/** * The console command description. * * @var string */ protected $description = 'Retry a failed queue job';
/** * Execute the console command. * * @return void */ public function fire() { $ids = $this->argument('id');
if (count($ids) === 1 && $ids[0] === 'all') { $ids = Arr::pluck($this->laravel['queue.failer']->all(), 'id'); }
foreach ($ids as $id) { $this->retryJob($id); } }
/** * Retry the queue job with the given ID. * * @param string $id * @return void */ protected function retryJob($id) { $failed = $this->laravel['queue.failer']->find($id);
if (! is_null($failed)) { $failed = (object) $failed;
$failed->payload = $this->resetAttempts($failed->payload);
$this->laravel['queue']->connection($failed->connection) ->pushRaw($failed->payload, $failed->queue);
$this->laravel['queue.failer']->forget($failed->id);
$this->info("The failed job [{$id}] has been pushed back onto the queue!"); } else { $this->error("No failed job matches the given ID [{$id}]."); } }
/** * Reset the payload attempts. * * @param string $payload * @return string */ protected function resetAttempts($payload) { $payload = json_decode($payload, true);
if (isset($payload['attempts'])) { $payload['attempts'] = 1; }
return json_encode($payload); }
/** * Get the console command arguments. * * @return array */ protected function getArguments() { return [ ['id', InputArgument::IS_ARRAY, 'The ID of the failed job'], ]; } }
|