Maison  >  Article  >  cadre php  >  Développement Laravel : Comment gérer les tâches asynchrones à l'aide de Laravel Queues et Supervisor ?

Développement Laravel : Comment gérer les tâches asynchrones à l'aide de Laravel Queues et Supervisor ?

王林
王林original
2023-06-13 16:04:16843parcourir

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.

Que sont les files d'attente Laravel ?

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.

Utilisation des files d'attente Laravel

Ci-dessous, nous présenterons étape par étape comment utiliser les files d'attente Laravel pour gérer des tâches asynchrones.

Première étape : configurer le pilote de file d'attente

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 :

  • Database Driver - will Les tâches sont stockées dans une base de données et servent de système de file d'attente d'entrée de gamme.
  • Redis Driver - Utilise la prise en charge de file d'attente intégrée de Redis.
  • Beanstalkd Driver - Utilise le service de file d'attente de messages Beanstalkd.
  • Pilote Amazon SQS - Utilise Amazon Simple Queue Service (SQS).

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,
    ],
]

Étape 2 : Créer une file d'attente task class# 🎜🎜#

Ensuite, vous devez créer une classe de tâches de file d'attente pour gérer les tâches asynchrones. Cette classe doit être une simple classe PHP qui définit la logique de la tâche. Par exemple, le code suivant est une classe de tâches asynchrone pour l'envoi d'e-mails :

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());
    }
}

Cette classe implémente l'interface ShouldQueue, qui est nécessaire pour indiquer à Laravel de convertir cette classe en classe de tâches asynchrone. La méthode handle() définit la logique spécifique de la tâche, de sorte que les tâches que vous devez gérer de manière asynchrone peuvent être effectuées ici.

Étape 3 : Placez la tâche dans la file d'attente

Maintenant que la tâche de file d'attente et le pilote de file d'attente sont prêts, l'étape suivante consiste à mettre la tâche dans la file d'attente. Utilisez le code suivant pour appeler une file d'attente Eloquent n'importe où dans votre projet :

use AppJobsSendEmail; 
use IlluminateSupportFacadesQueue;
...
Queue::push(new SendEmail('example@test.com'));

Ou vous pouvez utiliser la méthode dispatch() pour mettre des tâches dans la file d'attente, comme ceci :

SendEmail::dispatch('example@test.com');
#🎜🎜 #Étape 4 : Exécuter les tâches de file d'attente

Une fois que vous avez mis la tâche dans la file d'attente, la tâche sera envoyée dans la file d'attente, en attente d'exécution. Vous pouvez utiliser le code suivant pour exécuter la file d'attente :

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

Étant donné que les tâches de file d'attente doivent s'exécuter en arrière-plan, un démon de processus doit être configuré sur le serveur pour garantir que les tâches peuvent continuer à s'exécuter exécuter. Supervisor est un démon de processus couramment utilisé qui garantit que les processus en arrière-plan ne se terminent pas anormalement et les redémarre en cas de besoin.

Première étape : Installer Supervisor

Dans le système Ubuntu, vous pouvez utiliser la commande suivante pour installer Supervisor :

sudo apt-get update
sudo apt-get install supervisor

Deuxième étape : Créer un superviseur fichier de configuration

Créez un fichier de configuration dans le répertoire /etc/supervisor/conf.d, par exemple myqueue.conf :

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

Après avoir modifié le fichier de configuration du superviseur, votre superviseur a besoin être averti pour recharger le fichier de configuration. Utilisez la commande suivante pour recharger le superviseur :

sudo supervisorctl reread

sudo supervisorctl update

sudo supervisorctl start all

Étape 4 : afficher le journal du superviseur

Vous pouvez afficher les informations de sortie et d'erreur de la tâche asynchrone dans le fichier journal du superviseur . Par exemple, vous pouvez afficher le journal du superviseur en affichant le chemin et le nom du fichier journal spécifiés dans le fichier de configuration : Tâches asynchrones, utilisez les files d'attente Laravel pour mettre facilement les tâches fastidieuses dans une file d'attente et rendre votre application plus efficace et plus réactive. Utilisez Supervisor pour garantir que les tâches en arrière-plan peuvent continuer à s'exécuter et être automatiquement redémarrées en cas de besoin. J'espère que cet article sera utile à votre développement.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn