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.
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