Laravel queue

Las queue en Laravel son colas de trabajo que se utilizan para realizar procesos en tareas secundarias posteriores al momento de petición, para principalmente no demorar la acción del usuario y tenga que esperar a que la tarea termine.

Por ejemplo al enviar email con Laravel mail, el usuario no tiene porqué esperar a que finalize el envío del email, ya que se puede demorar bastante al conectar con el servidor de correo, si no que la tarea de mandar un email se lleva a la cola de tareas, y así el usuario puede seguir utilizando la áplicación.

Índice
  1. Configurar laravel jobs
  2. Driver database
  3. Utilizar queue en un controlador
  4. Ejecutar cola de trabajo o queue

Configurar laravel jobs

En el fichero de configuración queue viene definido por defecto un valor por defecto que es sync.

config\queue.php

Este valor sync es uno de los drivers que se pueden utilizar entro otros "sync",  "database",  "beanstalkd",  "sqs",  "redis",  "null" y se pueden agregar en la propiedad 'default'

'default' => env('QUEUE_CONNECTION', 'sync'),

Driver database

En este ejemplo vamos a utilizar el driver database

Para utilizarla hay que ir al fichero de configuración .env y buscar la variable QUEUE_CONNECTION y asignarle el vaor de 'database'

QUEUE_CONNECTION=database

Crear tabla jobs

Este driver database requiere de utilizar una tabla en la base de datos, y en vez de crearla manualmente, laravel permite crearla automáticamente con el comando queue:table, y después aplicar la migración

php artisan queue:table

php artisan migrate

Utilizar queue en un controlador

Para utilizar la cola de trabajo en un controlador vale con llamar al método queue() y pasarle por parámetro la variable requerida en el controlador.

Por ejemplo, enviar un email con laravel a través de una cola de trabajo, en vez de utilizar el metodo send(), lo cambiamos por el método queue

Mail::to($course->teacher->email)->send($mail);

Mail::to($course->teacher->email)->queue($mail);

Esto va a acumular las tareas en la cola de trabajo, a la espera de que se ejecute el jobs. Si se utiliza database como driver, va a guardar como registro nuevo en la base de datos.

Ejecutar cola de trabajo o queue

Para ejecutar todas las tareas que hay pendientes en la cola, se puede hacer ejecutando el comando queue:work

php artisan queue:work

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir