Maison  >  Article  >  cadre php  >  Comment utiliser les files d'attente pour implémenter des tâches asynchrones dans ThinkPHP6 ?

Comment utiliser les files d'attente pour implémenter des tâches asynchrones dans ThinkPHP6 ?

PHPz
PHPzoriginal
2023-06-12 10:46:402959parcourir

Avec le développement continu des applications Internet et des systèmes d'information, de nombreuses entreprises doivent utiliser des tâches asynchrones pour traiter des opérations avec une logique complexe ou des exigences de performances élevées. Cependant, la méthode de traitement synchrone traditionnelle apportera une pression et une charge plus importantes aux performances du système. Afin de résoudre ce problème, nous pouvons implémenter un traitement de tâches asynchrone en utilisant des files d'attente de messages. Cet article explique comment utiliser les files d'attente pour implémenter des tâches asynchrones dans le framework ThinkPHP6.

1. Installation et configuration

1.1 Téléchargez et installez l'extension

Dans ThinkPHP6, nous pouvons utiliser le composant Queue pour implémenter le traitement de file d'attente. Installez en ajoutant des dépendances dans le fichier composer.json comme suit :

composer require topthink/think-queue

1.2 Fichier de configuration

Installation Après succès, nous avons besoin pour ajouter le fichier de configuration au projet et effectuer les configurations associées. Créez un nouveau fichier queue.php dans le répertoire de configuration et ajoutez-y les éléments de configuration suivants :

return [
    'default' => env('queue.driver', 'sync'),

    'connections' => [
        'sync' => [
            'driver' => 'sync',
        ],
        'redis' => [
            'driver' => 'redis',
            'queue' => 'default',
            'connection' => 'default',
            'retry_after' => 90,
            'block_for' => null,
        ],
    ],
];

Il s'agit principalement de configurer le pilote par défaut et la méthode de connexion de la file d'attente. Parmi eux, nous prenons en charge deux méthodes de pilotage : la synchronisation (sync) et Redis (redis). Redis est une base de données distribuée en mémoire qui peut prendre en charge diverses structures de données, en particulier les paires clé-valeur, les listes, les ensembles, les hachages et autres structures de données. Dans le composant Queue de ThinkPHP6, nous pouvons également utiliser le pilote Redis comme méthode de stockage de la file d'attente des messages.

De plus, nous pouvons également effectuer d'autres configurations sur la file d'attente, telles que le nom de la file d'attente (queue), le nom de la connexion (connection), l'heure de la nouvelle tentative (retry_after), etc.

Les éléments de configuration ci-dessus peuvent également être configurés dans le fichier de configuration de l'application (config/app.php) ou dans le fichier de configuration de l'environnement.

2. Créer des tâches de file d'attente

Dans le cas de ThinkPHP 6, nous pouvons utiliser le mode usine pour créer des tâches de file d'attente, et en même temps, nous pouvons implémenter des tâches spécifiques logique en héritant de la classe Job .

2.1 Créer une usine

Nous pouvons créer le fichier Job.php dans le répertoire app/job et définir une classe d'usine pour la file d'attente des messages, dans laquelle le processus de traitement spécifique les messages de file d’attente sont implémentés. L'implémentation spécifique est la suivante :

namespace appjob;

use thinkqueueJob;

class MyJob
{
    public function handle(Job $job, $data)
    {
        //... 具体任务处理逻辑
        //... 执行成功,删除该消息
        $job->delete();
    }
}

Ici, nous définissons une classe MyJob, dans laquelle la méthode handle est responsable du traitement logique spécifique des messages de file d'attente. Lorsque l'exécution est réussie, nous pouvons supprimer ce message de file d'attente en appelant la méthode $job->delete().

2.2 Créer des tâches

Nous pouvons créer les tâches que nous devons traiter en héritant de la classe Job. Par exemple, nous pouvons créer une classe SendEmail et utiliser cette tâche pour envoyer des e-mails.

namespace appjob;

use thinkqueueJob;

class SendEmail extends Job
{
    public function handle()
    {
        // ...具体的邮件发送逻辑
        // ...任务执行完成,删除该消息
        $this->delete();
    }
}

Dans la méthode handle, nous pouvons écrire une logique d'envoi d'e-mails spécifique. Dans le même temps, nous pouvons également appeler la méthode delete à la fin pour supprimer les messages de file d'attente qui ont été exécutés avec succès.

3. Ajoutez la tâche à la file d'attente

Après avoir créé la tâche de file d'attente, nous devons l'ajouter à la file d'attente des messages pour un traitement asynchrone ultérieur. Dans le framework ThinkPHP6, nous pouvons utiliser le fournisseur de services de file d'attente pour ajouter des tâches.

app('queue')->push(new SendEmail());

Ici, nous obtenons l'instance du service de file d'attente en appelant $app['queue'] et ajoutons la tâche SendEmail à la file d'attente via la méthode push.

4. Surveillance et exécution des tâches

Une fois la tâche ajoutée à la file d'attente, nous devons être capables de comprendre l'état de la tâche à temps et de la traiter à temps. Pour cette exigence, nous pouvons utiliser l'outil Artisan Console de ThinkPHP6. Il s'agit d'une extension basée sur le composant Symfony Console et nous permet d'exécuter certaines commandes spécifiques via la console.

4.1 Démarrer la surveillance des files d'attente

On peut démarrer la console et exécuter la commande suivante directement sur la ligne de commande :

php think queue:work --daemon --queue default

Parmi eux, -- queue spécifie la file d'attente. Le nom peut être personnalisé, --daemon signifie s'exécuter en arrière-plan.

Après l'exécution de cette commande, la surveillance de la file d'attente sera lancée et les messages de la file d'attente seront traités un par un.

4.2 Surveiller l'état d'exécution des tâches

Pendant l'exécution de la file d'attente, nous pouvons utiliser le moniteur pour afficher l'état d'exécution de la file d'attente. Exécutez la commande suivante sur la ligne de commande :

php think queue:listen --queue default --tries=3

Parmi elles, --queue spécifie le nom de la file d'attente et --tries spécifie le nombre de tentatives de tâche.

Après l'exécution, l'état et l'état d'exécution spécifique de la file d'attente de messages actuelle seront affichés. Nous pouvons surveiller et traiter l’état de la tâche en temps opportun en fonction des informations de sortie.

5. Résumé

En utilisant des files d'attente pour implémenter des tâches asynchrones, nous pouvons améliorer efficacement les performances et la stabilité du système. Cet article présente principalement comment utiliser les files d'attente pour implémenter des tâches asynchrones dans ThinkPHP6 et fournit une explication détaillée de la configuration des files d'attente, de la création et de l'ajout de tâches, de la surveillance et de l'exécution des files d'attente. J'espère que cela sera utile à tout le monde lors de la gestion de tâches asynchrones dans des applications pratiques.

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