Por qué usar colas
Algunas operaciones (envío de correos, generación de PDFs, procesamiento de imágenes) ralentizan la petición HTTP. Las colas permiten encolar el trabajo y devolver una respuesta rápida al usuario; un worker procesa los jobs en segundo plano.
Usar colas mejora la experiencia de usuario y la escalabilidad. Laravel ofrece drivers para
sync,database,redis,sqsy otros.
Crear un Job
php artisan make:job ProcessOrder
Un Job típico recibe datos en el constructor, implementa handle() y opcionalmente define reintentos y timeouts:
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class ProcessOrder implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public function __construct(
public int $orderId
) {}
public function handle(): void
{
// Lógica de procesamiento
}
}
ShouldQueue indica que el job debe encolarse en lugar de ejecutarse de forma síncrona. SerializesModels serializa modelos Eloquent de forma segura.
Despachar Jobs
Desde un controlador o servicio:
ProcessOrder::dispatch($orderId);
Para ejecución diferida (por ejemplo, 1 minuto después):
ProcessOrder::dispatch($orderId)->delay(now()->addMinute());
Para ejecutar después de enviar la respuesta HTTP al cliente (útil para no bloquear la respuesta):
ProcessOrder::dispatchAfterResponse($orderId);
Configuración del driver
En .env define QUEUE_CONNECTION. Opciones comunes:
sync: ejecuta jobs de forma síncrona (útil en desarrollo).database: usa una tablajobs; requierephp artisan queue:tabley migración.redis: requiere Redis configurado.
Para el driver database:
php artisan queue:table
php artisan migrate
Ejecutar el worker
Un proceso mantiene vivo el worker que consume la cola:
php artisan queue:work
En producción suele usarse un gestor de procesos (Supervisor, systemd) para mantener el worker activo y reiniciarlo si falla.
Alan Sastre
Ingeniero de Software y formador, CEO en CertiDevs
Ingeniero de software especializado en Full Stack y en Inteligencia Artificial. Como CEO de CertiDevs, Laravel es una de sus áreas de expertise. Con más de 15 años programando, 6K seguidores en LinkedIn y experiencia como formador, Alan se dedica a crear contenido educativo de calidad para desarrolladores de todos los niveles.
Más tutoriales de Laravel
Explora más contenido relacionado con Laravel y continúa aprendiendo con nuestros tutoriales gratuitos.
Aprendizajes de esta lección
Crear y despachar Jobs para procesar tareas en segundo plano con el sistema de colas.
Cursos que incluyen esta lección
Esta lección forma parte de los siguientes cursos estructurados con rutas de aprendizaje