La cola de Laravel es una de las características más útiles del marco de Laravel. Esta característica se utiliza para esperar tareas que requieren mucho tiempo y realizar tareas en un momento posterior para mejorar el rendimiento y la eficiencia de la aplicación Laravel. Esta característica proporciona diferentes tipos de colas en back -end, como Amazon SQS, Redis, Beanstalk, Synchronous Driver o Relacional Base de datos. Se utiliza un controlador de cola nulo para descartar trabajos en cola. El archivo de configuración de la cola se almacena en la ubicación
config/cola.php. Un ejemplo común de usar la cola de Laravel es enviar correos electrónicos. Cuando se requiere lidiar con una gran cantidad de correos electrónicos en la aplicación Laraval, entonces es mejor usar colas de Laravel para acelerar el procesamiento. Este tutorial muestra cómo usar las colas de Laravel para enviar una gran cantidad de correos electrónicos.
Requisitos previos
Antes de comenzar este tutorial, primero, complete las siguientes tareas:
- Instale un proyecto fresco de Laravel
- Configurar la conexión de la base de datos
- Configurar la configuración para enviar los correos electrónicos (puede verificar el correo electrónico de envío del tutorial para enviar correo electrónico con SMTP)
Crear mesa
Debes crear el trabajos tabla en la base de datos para almacenar todas las colas. Ejecute el siguiente comando desde el terminal para crear el archivo de migración para el trabajos mesa.
$ PHP cola artesanal: mesa
Puede abrir el archivo de migración desde la ubicación base de datos/migraciones/. El archivo contiene el siguiente contenido.
use Illuminate \ Database \ Migrations \ Migration;
use Illuminate \ Database \ Schema \ BluePrint;
use iluminate \ support \ facades \ Schema;
clase createJobstable extiende la migración
/**
* Ejecutar las migraciones.
*
* @return void
*/
función pública up ()
Schema :: Create ('Jobs', function (BluePrint $ Table)
$ table-> bigincrements ('id');
$ table-> string ('queue')-> index ();
$ table-> longText ('carga útil');
$ table-> unsignedtinyInteger ('intentos');
$ table-> unsignedinteger ('reserved_at')-> nullable ();
$ table-> unsignedinteger ('disponible_at');
$ table-> unsignedinteger ('create_at');
);
/**
* Invertir las migraciones.
*
* @return void
*/
Función pública Down ()
Schema :: Dropifexists ('Jobs');
Ejecute el siguiente comando desde el terminal para crear el trabajo mesa.
$ PHP Artisan Migrate
Crear clase de correo
Debe crear una clase de correo electrónico para enviar correos electrónicos de la aplicación Laravel. Ejecute el siguiente comando para crear la clase de correo nombrada Enviar correo electrónico en la ubicación aplicación/correo.
$ PHP Artisan Make: correo electrónico SendEmail
El contenido de esta clase se muestra a continuación. El nombre de archivo de vista que se usa en el construir() El método se creará en la próxima parte de este tutorial.
Aplicación de espacio de nombres \ mail;
use iluminate \ bus \ queeable;
use iluminar \ contracts \ queue \ deberíaqueue;
use iluminate \ mail \ mailable;
usar iluminado \ queue \ SerializesModels;
La clase SendEmail se extiende por correo
Use queable, SerializeModels;
/**
* Crear una nueva instancia de mensaje.
*
* @return void
*/
función pública __construct ()
//
/**
* Construir el mensaje.
*
* @return $ esto
*/
Función pública Build ()
/ * Defina el nombre de vista que se utilizará para la plantilla de correo electrónico */
devolver $ this-> ver ('correo electrónico');
Crear vista
Crea el archivo de vista con nombre correo electrónico.cuchilla.php con el siguiente contenido que se enviará como el cuerpo de correo electrónico.
Bienvenido a Linux Sugerencia
Aprenda a Laravel fácilmente
Crea una clase de trabajo
Ejecute el siguiente comando para crear una clase de trabajo. El nombre de archivo de la clase de trabajo nombrado Envío.php se creará en la ubicación aplicación/trabajos.
$ PHP Artisan Make: Job SendingEmail
El contenido del Envío.php se muestra a continuación. Debe establecer una dirección de correo electrónico válida dentro del a() método del manejar() función para probar si el código funciona correctamente. Establezca la dirección de correo electrónico válida en lugar de 'Receptor correo electrónico de dirección' dentro de a() método para verificar si la cola funciona correctamente.
Aplicación de espacio de nombres \ Jobs;
use iluminate \ bus \ queeable;
use iluminar \ contracts \ queue \ deberíaqueue;
use Illuminate \ Foundation \ Bus \ Dispatchable;
usar iluminado \ queue \ interactswithqueue;
usar iluminado \ queue \ SerializesModels;
/ * Se agregaron los paquetes necesarios */
usar el correo;
use la aplicación \ mail \ sendEmail;
Los implementos de correo de correo de clase deben ser consecuentes
usar despachables, interactswithqueue, queable, serializesmodels;
/**
* Crear una nueva instancia de trabajo.
*
* @return void
*/
función pública __construct ()
//
/**
* Ejecutar el trabajo.
*
* @return void
*/
Mango de la función pública ()
/ * Crear el objeto de clase de correo y enviar correo electrónico */
$ correo electrónico = new SendEmail ();
/ * Establecer una dirección de correo electrónico válida */
Correo :: a ('Dirección de correo electrónico del receptor')-> Enviar ($ correo electrónico);
Crear controlador
Ejecute el siguiente comando para crear un controlador para manejar la cola. Cuando el Handlequeue () Se ejecuta la función del controlador, el trabajo de la cola se impulsará y el correo electrónico se enviará.
$ PHP Artisan Make: Controller SendEmailController
SendEmailController.php
APLICACIÓN DEL PAGO DE NAME \ HTTP \ Controllers;
use iluminar \ http \ solicitud;
/ * Agregar los paquetes necesarios */
use la aplicación \ Jobs \ sendingEmail;
usar carbono \ carbono;
clase SendEmailController extiende el controlador
/**
* Uso de las colas de Laravel
*/
Función pública Handlequeue ()
/ * Empujar el nuevo trabajo en la cola de trabajo */
envío (nuevo sendingEmail ());
/ * Imprimir mensaje después de enviar correo electrónico */
echo 'Se ha enviado el correo electrónico';
Agregar ruta
Abre el web.php archivo del rutas carpeta y agregue la siguiente ruta para ejecutar el trabajo de cola usando el controlador.
Ruta :: Get ('Correo electrónico', 'sendEmailController@handlequeue');
Ejecute la siguiente URL en el navegador para verificar si el código está funcionando. Abra la dirección de correo electrónico del receptor para verificar si se ha recibido un nuevo correo electrónico.
http: // localhost: 8000/correo electrónico
Agregar retraso
Abre el Envío.php presentar nuevamente y modificar el contenido del Handlequeue () función para agregar el retraso de cinco segundos a los trabajos de cola.
APLICACIÓN DEL PAGO DE NAME \ HTTP \ Controllers;
use iluminar \ http \ solicitud;
/ * Agregar los paquetes necesarios */
use la aplicación \ Jobs \ sendingEmail;
usar carbono \ carbono;
clase SendEmailController extiende el controlador
/**
* Uso de las colas de Laravel
*/
Función pública Handlequeue ()
/ * Crear un nuevo objeto de cola con retraso de 5 segundos */
$ emailjob = (new sendingEmail ())-> retraso (carbono :: ahora ()-> addSeconds (5));
/ * Empujar el nuevo trabajo en la cola de trabajo */
Dispatch ($ correo electrónico);
/ * Imprimir mensaje después de enviar correo electrónico */
echo 'correo electrónico enviado después de cinco segundos';
Nuevamente, ejecute la siguiente URL en el navegador para verificar si el código está funcionando. Aquí, el correo electrónico se enviará después de cinco segundos, utilizando el método demandado () de cinco segundos.
http: // localhost: 8000/correo electrónico
Verifique la bandeja de entrada de la dirección de correo electrónico del receptor para averiguar si se ha recibido un nuevo correo electrónico después de 5 segundos. Se recibirá un correo electrónico con el siguiente contenido si el trabajo de la cola funciona correctamente.
Conclusión
Este tutorial muestra un uso muy simple de la cola de Laravel. Puede usar las colas de Laravel para diversos fines, según los requisitos de su aplicación. Espero que este tutorial haya ayudado a los lectores a comprender mejor los conceptos básicos de las colas de Laravel.