Maison  >  Article  >  cadre php  >  Comment utiliser Supervisor pour gérer la file d'attente ThinkPHP6 ?

Comment utiliser Supervisor pour gérer la file d'attente ThinkPHP6 ?

WBOY
WBOYoriginal
2023-06-12 08:51:091460parcourir

À mesure que les applications Web continuent de se développer, nous devons gérer un grand nombre de tâches pour maintenir la stabilité et la disponibilité de l'application. Utiliser un système de file d’attente est une solution. ThinkPHP6 fournit un système de file d'attente intégré pour gérer les tâches. Cependant, gérer un grand nombre de tâches nécessite une meilleure gestion des files d'attente, ce qui peut être réalisé à l'aide de Supervisor.

Cet article explique comment utiliser Supervisor pour gérer les files d'attente ThinkPHP6. Avant cela, nous devons comprendre quelques concepts de base :

  1. queue system
    Le système de file d'attente est un moyen de traiter les tâches de manière asynchrone, en ajoutant des tâches à la file d'attente au lieu de les traiter directement. Une fois qu'une tâche est ajoutée à la file d'attente, elle peut être attribuée à différents travailleurs pour éviter un blocage à long terme de l'application Web. Le système de file d'attente peut également effectuer certaines opérations complexes de tâches.
  2. Tâche
    Dans un système de file d'attente, une tâche est le travail qui doit être effectué. Vous pouvez regrouper le code qui doit être exécuté de manière asynchrone dans une tâche, puis ajouter la tâche à la file d'attente pour attendre le traitement ultérieur. Nous pouvons utiliser le composant de file d'attente dans le framework PHP ou une bibliothèque tierce pour gérer des tâches, comme le composant de file d'attente de Laravel ou Beanstalkd, etc.
  3. Supervisor
    Supervisor est un système de contrôle de processus qui peut surveiller et contrôler un ou plusieurs processus, y compris les travailleurs de file d'attente. Le superviseur peut rendre le système de file d'attente plus stable et durable. L'utilisation de Supervisor peut redémarrer automatiquement les travailleurs lorsque les tâches échouent et peut également garantir que les tâches en file d'attente peuvent continuer à être traitées après le redémarrage de l'application Web.

Après avoir compris ces concepts de base, nous présenterons comment utiliser Supervisor pour gérer les files d'attente ThinkPHP6.

Première étape : Installer Supervisor

Pour utiliser Supervisor pour la gestion des files d'attente, nous devons d'abord installer Supervisor. Sur le système Ubuntu, vous pouvez utiliser la commande suivante pour installer :

sudo apt-get install supervisor

Sur le système CentOS, vous pouvez utiliser la commande suivante pour installer :

sudo yum install supervisor

Une fois l'installation terminée, vous pouvez utiliser la commande suivante Start Supervisor :

sudo systemctl start supervisor

En même temps, nous devons également configurer le fichier /etc/supervisor/conf.d/中创建一个新的配置文件来管理队列工作者。我们可以在该目录中创建一个任意名称的文件,如laravel-worker.conf. Ensuite, nous verrons comment modifier ce fichier.

Étape 2 : Modifiez le fichier de configuration du superviseur

Modifiez le fichier de configuration du superviseur et ajoutez des travailleurs à la liste de surveillance des superviseurs. Nous pouvons utiliser la commande suivante pour modifier le fichier de configuration que nous venons de créer :

sudo nano /etc/supervisor/conf.d/laravel-worker.conf

Ajoutez la configuration suivante au fichier :

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
directory=/var/www/laravel #修改为你的项目目录
command=php /var/www/laravel/artisan queue:work
autostart=true
autorestart=true
user=www-data #修改为你的Web服务器运行用户
numprocs=8 #工作者数量,此处建议设置为CPU核心数2-4倍
redirect_stderr=true
stdout_logfile=/var/www/laravel/storage/logs/worker.log #修改为你的日志文件位置

Après avoir ajouté la configuration ci-dessus au fichier, nous pouvons utiliser la commande suivante pour recharger le fichier de configuration du superviseur :

sudo supervisorctl reread
sudo supervisorctl update

De cette façon, le superviseur peut démarrer nos travailleurs de file d'attente et les gérer. Nous pouvons utiliser la commande suivante pour afficher tous les processus démarrés par Supervisor :

sudo supervisorctl status

Étape 3 : Tester la tâche de file d'attente

Maintenant, nous avons démarré avec succès le gestionnaire de file d'attente à l'aide de Supervisor. Ensuite, nous devons tester la tâche de file d'attente. Tout d’abord, assurez-vous que votre file d’attente est configurée dans votre application.

Ajoutez une tâche de test quelque part et laissez la file d'attente commencer à fonctionner. Par exemple, créez une tâche d'envoi d'e-mails :

<?php

namespace appqueue;

use thinkqueueJob;

class SendEmail
{
    public $user;

    public function __construct($user)
    {
        $this->user = $user;
    }

    public function fire(Job $job, $data)
    {
        //发送Email的代码
        if (Math.random() < 0.5) {
            // 处理失败
            $job->release(5);// 5秒后重试
        } else {
            // 成功处理
            $job->delete();
        }
    }
}

Ajoutez une méthode dans le contrôleur et ajoutez la tâche :

<?php

namespace appcontroller;

use thinkController;
use thinkqueueQueue;

class Email extends Controller
{
    public function index()
    {
        $user = ['email' => 'test@test.com', 'name' => 'test'];
        $job = new ppqueueSendEmail($user);
        app('queue')->push($job);
    }
}

De cette façon, nous pouvons utiliser avec succès Supervisor pour gérer la file d'attente ThinkPHP6. Si vous souhaitez en savoir plus sur le système de files d'attente, vous pouvez lire la documentation officielle. J'espère que cet article pourra vous aider à exécuter avec succès votre application Web !

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