Queues y jobs en Laravel con driver database

Clase 15 de 33Curso Avanzado de Laravel

Contenido del curso

Laravel y Base de Datos

    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.