Jobs
Los Jobs representan tareas que pueden ejecutarse de forma sincrona o asincrona. Son ideales para operaciones pesadas que no deben bloquear la respuesta al usuario.
Crear un job
php artisan make:job ProcessPodcastUpload
class ProcessPodcastUpload implements ShouldQueue
{
use Queueable;
public int $tries = 3;
public int $backoff = 60;
public int $timeout = 300;
public function __construct(
private Podcast $podcast
) {}
public function handle(AudioProcessor $processor): void
{
$processor->process($this->podcast->audio_path);
$this->podcast->update(['processed' => true]);
}
public function failed(Throwable $exception): void
{
Log::error('Error procesando podcast', [
'podcast_id' => $this->podcast->id,
]);
}
}
Despachar jobs
// Enviar a la cola (asincrono)
ProcessPodcastUpload::dispatch($podcast);
// Con opciones
ProcessPodcastUpload::dispatch($podcast)
->onQueue('media')
->delay(now()->addMinutes(5));
// Encadenar jobs
Bus::chain([
new ProcessPodcastUpload($podcast),
new PublishPodcast($podcast),
new NotifySubscribers($podcast),
])->dispatch();
// Ejecutar sincrono (sin cola)
ProcessPodcastUpload::dispatchSync($podcast);
Los jobs son esenciales para construir aplicaciones escalables. Se procesan con php artisan queue:work y soportan multiples drivers como Redis, Amazon SQS y base de datos.