Développement Laravel : Comment utiliser Laravel Queues et Supervisor pour gérer les tâches asynchrones ?
Dans les applications Web modernes, les tâches asynchrones sont devenues partie intégrante des activités quotidiennes. Les tâches asynchrones peuvent améliorer le temps de réponse des applications, optimiser l'expérience utilisateur et améliorer l'évolutivité des applications. Laravel Queues est un outil puissant fourni par le framework Laravel pour gérer les tâches asynchrones et les files d'attente de messages. Cet article présentera le concept et l'utilisation de Laravel Queues, et le combinera avec Supervisor pour gérer les tâches asynchrones.
Laravel Queues est une méthode de gestion des tâches asynchrones et des files d'attente de messages. Les files d'attente Laravel vous permettent de mettre des tâches fastidieuses dans une file d'attente sans affecter le temps de réponse de vos requêtes Web. Par exemple, l'envoi d'e-mails, le traitement de vidéos ou la génération de PDF sont autant d'opérations chronophages. L'utilisation d'une file d'attente pour les placer en arrière-plan peut rendre votre application plus efficace et plus réactive.
Laravel Queues prend en charge plusieurs technologies backend telles que Database, Redis, Beanstalkd et Amazon SQS via certains pilotes de file d'attente intégrés. Cela permet aux développeurs d'utiliser leur technologie de file d'attente préférée pour gérer les tâches asynchrones.
Ci-dessous, nous présenterons étape par étape comment utiliser les files d'attente Laravel pour gérer des tâches asynchrones.
Il existe un fichier nommé queue.php dans le fichier de configuration de Laravel que vous pouvez utiliser pour configurer les files d'attente et les pilotes de file d'attente. Vous pouvez générer le fichier queue.php avec la commande suivante :
php artisan queue:table php artisan queue:failed-table php artisan migrate
Cela générera le fichier de migration et la table de file d'attente. Exécutez la commande migrate pour effectuer la migration.
Dans le fichier queue.php, vous pouvez choisir d'utiliser une variété de pilotes de file d'attente :
Par exemple, si vous souhaitez utiliser le pilote de file d'attente Redis, veuillez configurer le fichier queue.php comme suit :
'default' => env('QUEUE_CONNECTION', 'redis'), 'connections' => [ 'redis' => [ 'driver' => 'redis', 'connection' => 'default', 'queue' => env('REDIS_QUEUE', 'default'), 'retry_after' => 90, 'block_for' => null, ], ]
class SendEmail implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; protected $email; /** * Create a new job instance. * * @return void */ public function __construct($email) { $this->email = $email; } /** * Execute the job. * * @return void */ public function handle() { Mail::to($this->email)->send(new WelcomeEmail()); } }
use AppJobsSendEmail; use IlluminateSupportFacadesQueue; ... Queue::push(new SendEmail('example@test.com'));
SendEmail::dispatch('example@test.com');
php artisan queue:work
L'exécution de cette commande démarrera un écouteur et traitera les tâches dans la file d'attente.
Utilisez Supervisor pour gérer les tâches asynchrones
Première étape : Installer Supervisor
sudo apt-get update sudo apt-get install supervisor
Deuxième étape : Créer un superviseur fichier de configuration
nano /etc/supervisor/conf.d/myqueue.conf
Ajoutez le contenu suivant au fichier de configuration , assurez-vous de modifier le chemin, la commande et le nom d'utilisateur pour qu'ils correspondent à votre programme :
[program:myqueue] process_name=%(program_name)s_%(process_num)02d command=/usr/bin/php /path/to/artisan queue:work --sleep=3 --tries=3 --daemon autostart=true autorestart=true user=username numprocs=1 redirect_stderr=true stdout_logfile=/path/to/storage/logs/myqueue.log
Troisième étape : Recharger le superviseur
sudo supervisorctl reread sudo supervisorctl update sudo supervisorctl start all
Étape 4 : afficher le journal du superviseur
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!