Queues y jobs en Laravel con driver database

Clase 15 de 33Curso Avanzado de Laravel

Resumen

Optimiza el rendimiento en Laravel con procesamiento en segundo plano y respuestas rápidas al cliente. Aquí aprenderás, paso a paso, a configurar queues y jobs con el driver database, crear un Mailable y ejecutar un worker que procese tareas sin bloquear tu aplicación.

¿Qué son y cómo funcionan las queues y jobs en Laravel?

Las queues permiten delegar tareas pesadas a segundo plano. Un job encapsula la tarea, se almacena en una cola y el cliente recibe la respuesta sin esperar.

  • El cliente envía una petición. La aplicación crea un job y lo encola.
  • Un worker procesa los jobs cola por cola en segundo plano.
  • Resultado: respuestas inmediatas y servidor más estable.

¿Por qué usar procesamiento en segundo plano?

  • Enviar correos puede ser costoso. Mejor en cola.
  • Respuestas HTTP más rápidas.
  • Menos carga pico en el servidor.

¿Cómo configurar el driver database y crear la tabla de jobs?

Laravel ofrece varios drivers y prerrequisitos. Aquí se usa el driver database para almacenar jobs en la base de datos.

¿Qué comandos artisan necesitas?

Ejecuta la migración de la tabla de jobs y aplica cambios:

php artisan queue:table php artisan migrate

Configura la conexión de cola en tu archivo de entorno:

QUEUE_CONNECTION=database
  • La tabla jobs almacenará cada tarea pendiente.
  • Conexión de cola ajustada a database.

¿Cómo crear y despachar un job que envía un Mailable y procesarlo con un worker?

Objetivo: enviar un correo de bienvenida cuando el usuario verifica su email.

¿Cómo se ve el código del job y del mailable?

Crea el job y el Mailable:

php artisan make:job SendWelcomeEmail php artisan make:mail WelcomeMail

Crea la vista para el correo en resources/views/Welcome/mail.blade.php:

<h1>Bienvenido a la aplicación</h1>

Implementa el job con el método handle y el facade de correo:

<?php namespace App\Jobs; use App\Mail\WelcomeMail; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; use Illuminate\Support\Facades\Mail; class SendWelcomeEmail implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; public string $userEmail; public function __construct(string $userEmail) { $this->userEmail = $userEmail; } public function handle(): void { Mail::to($this->userEmail)->send(new WelcomeMail()); } }

Despacha el job al verificar el usuario en tu controller (por ejemplo, VerificationController método verified):

public function verified(Request $request) { dispatch(new SendWelcomeEmail($request->user()->email)); }
  • El helper dispatch envía el job a la cola.
  • El método handle contiene la lógica de negocio.

¿Cómo ejecutar el worker y ver el correo enviado?

Procesa la cola desde la terminal:

php artisan queue:work # o php artisan queue:listen
  • Verás en consola cuándo un job se procesa.
  • El correo llegará con el asunto de tu Mailable, por ejemplo: «Bienvenido a la aplicación».
  • En ambientes de prueba puedes validar el envío con herramientas como Mailtrap.

¿Qué considerar en producción para queue work?

  • Usa un gestor de procesos como Supervisor.
  • Mantén corriendo: php artisan queue:work.
  • Garantiza reinicios automáticos si el proceso se detiene.

¿Te gustaría que cubra reintentos, tiempos de espera o colas nombradas? Comparte tus dudas y comenta qué necesitas implementar a continuación.