Reintentos, retrasos y encadenamiento de jobs
Configure intentos y retrasos, y encadene jobs dependientes.
Reintentos, retrasos y encadenamiento de jobs es una lección gratuita de PHP Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de PHP Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de PHP Academy incluye 4 lecciones en total.
Número máximo de intentos
Establezca cuántas veces debe reintentarse un job antes de trasladarlo a failed_jobs.
<?php
class SendWelcomeEmail implements ShouldQueue
{
public int $tries = 3; // retry up to 3 times
}Número máximo de excepciones
Use $maxExceptions para limitar los reintentos según el número de excepciones (a diferencia de attempts, que cuenta todos los intentos, incluidos los tiempos de espera agotados).
<?php
public int $maxExceptions = 3;Tiempo entre reintentos
Establezca un retraso (en segundos) entre los intentos de reintento.
<?php
public int $backoff = 60; // wait 60 seconds before retry
// Or exponential backoff:
public function backoff(): array
{
return [1, 5, 10]; // 1s, 5s, 10s between attempts
}Tiempo de espera del Job
Establezca un tiempo máximo de ejecución en segundos. Si el trabajador lo supera, el job vuelve a ponerse en la cola.
<?php
public int $timeout = 120; // 2 minutes maxEnviar con retraso
Retrase un job desde el punto del código en el que se envía.
<?php
SendReminder::dispatch($user)->delay(now()->addDay());
// Or pass a Carbon instance:
SendReminder::dispatch($user)->delay(Carbon::tomorrow());fail() y released()
Dentro de handle(), llame a $this->fail($exception) para marcar inmediatamente el job como fallido o a $this->release($delay) para volver a ponerlo en la cola con un retraso.
<?php
public function handle(): void
{
try {
// ...
} catch (TransientException $e) {
$this->release(30); // re-queue in 30 seconds
} catch (FatalException $e) {
$this->fail($e); // mark as failed now
}
}Método failed()
Defina un método failed() en el job para ejecutar tareas de limpieza cuando se hayan agotado todos los intentos.
<?php
public function failed(\Throwable $exception): void
{
// Notify team, update DB, etc.
Log::error("Job failed: ".$exception->getMessage());
}Encadenar Jobs
Encadene jobs para que cada uno se ejecute únicamente después de que el anterior se complete correctamente.
<?php
Bus::chain([
new DownloadFile($url),
new ProcessFile($path),
new NotifyUser($user),
])->dispatch();Capturar errores de la cadena
Use catch() para gestionar los errores de la cadena sin detenerla por completo.
<?php
Bus::chain([...])
->catch(fn (\Throwable $e) => Log::error($e))
->dispatch();Bus::batch()
Envíe un lote de jobs en paralelo y ejecute una devolución de llamada cuando todos terminen o cuando alguno falle.
<?php
Bus::batch([
new ImportRow($rows[0]),
new ImportRow($rows[1]),
])->then(fn ($b) => Log::info("All done"))
->catch(fn ($b, $e) => Log::error($e))
->dispatch();Opciones del trabajador de cola
Inicie los trabajadores con configuraciones específicas de reintentos y tiempo de espera: php artisan queue:work --tries=3 --timeout=90. La configuración del job prevalece sobre la del trabajador.
Resumen
Establezca $tries, $backoff y $timeout en el job. Use release() para fallos temporales y fail() para los permanentes. Encadene jobs secuenciales con Bus::chain().
Comprobación rápida
¿Qué método vuelve a poner un job en la cola con un retraso desde dentro de handle()?
Aprende PHP con un tutor de IA — gratis
Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.
- Cursos
- 49
- Lecciones
- 195
Preguntas frecuentes
¿La lección «Reintentos, retrasos y encadenamiento de jobs» es gratis?
Sí — el texto completo de «Reintentos, retrasos y encadenamiento de jobs» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de PHP Academy, actualiza a CoddyKit PRO. El curso de PHP Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Reintentos, retrasos y encadenamiento de jobs»?
Configure intentos y retrasos, y encadene jobs dependientes. Practicas PHP Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar PHP Academy?
No se requiere experiencia previa. PHP Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «Reintentos, retrasos y encadenamiento de jobs»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de PHP Academy?
Sí. Cada lección de PHP Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Conceptos y controladores de colas
- Creación y envío de jobs
- Reintentos, retrasos y encadenamiento de jobs
- Monitorización de colas con Laravel Horizon