Position actuelle: Accueil> Derniers articles> PHP implémente la gestion des exceptions par e-mail: une solution efficace basée sur la file d'attente

PHP implémente la gestion des exceptions par e-mail: une solution efficace basée sur la file d'attente

M66 2025-08-07

Solution pratique pour la file d'attente PHP pour gérer les exceptions de courrier

Dans le développement réel, le fait de ne pas envoyer de courriels est un problème courant, tel que la défaillance temporaire du serveur, l'interruption du réseau, le retard de réponse SMTP, etc. Pour améliorer la stabilité du système, nous pouvons ajouter des tâches de messagerie à la file d'attente et les traiter de manière asynchrone par des processus de fond indépendants pour éviter de bloquer les processus métier.

Installez et configurez le système de file d'attente BeanStalkd

Cet article prend BeanStalkd comme exemple pour expliquer comment créer une file d'attente par e-mail PHP.

Installez d'abord BeanStalkd:

 sudo apt-get installer beanstalkd

Démarrer le service:

 sudo systemctl start beanstalkd

Installez l'extension PHP BeanStalkd:

 PECL Installer Beanstalkd

Ajouter une configuration d'extension dans php.ini:

 extension = beanstalkd.so

Redémarrer le service PHP:

 sudo systemctl redémarrer php-fpm

Écrivez la classe de traitement de la file d'attente PHP Mail

Créez une classe pour envoyer du courrier et écouter les files d'attente:

Classe MailQueue
{
    protégé $ beanstalk;

    fonction publique __construct ()
    {
        $ this-> beanStalk = new PheanStalkPheanStalk ('127.0.0.1');
    }

    Fonction publique SendEmail ($ e-mail, $ sujet, $ message)
    {
        // ajouter des tâches de message
            'e-mail' => $ e-mail,
            'Subject' => $ Sujet,
            'message' => $ message,
        ]));
    }

    Fonction publique HandleEmails ()
    {
        // Écoutez les files d'attente et le courrier de processus Envoi de la logique while (true) {
            $ job = $ this-> beanStalk-> reserveFromtube ('mail_queue');
            $ data = json_decode ($ job-> getData (), true);

            // Envoi de la logique par e-mail, l'implémentation spécifique de $ this-> SendEmail ($ data ['e-mail'], $ data ['sujet'], $ data ['message']);

            // Supprimer la tâche $ this-> beanStalk-> supprimer ($ job);
        }
    }
}

Envoyer un courrier à l'aide de la file d'attente de courrier

Appelez les méthodes de la classe pour faire la queue de l'e-mail:

$ MailQueue = new MailQueue ();
$ MailQueue-> SendEmail ('Example@example.com ',' Mail Subject ',' Mail Content ');

Configurer le superviseur pour démarrer les tâches de file d'attente

Le superviseur est un outil de démon de processus couramment utilisé qui garantit que les scripts d'écoute de file d'attente continuent de s'exécuter.

[Programme: Mail_queue_Worker]
commande = php /path/to/mail_queue_worker.php
répertoire = / chemin / vers / projet
utilisateur = www-data
Numprocs = 1
autostart = true
autorestart = true
process_name =% (programme_name) s _% (process_num) 02d
redirect_stderr = true

Remplacez /path/to/mail_queue_worker.php par votre propre chemin de script de traitement pour vous assurer que le processus continue d'écouter et de traiter les e-mails en arrière-plan.

Résumer

Grâce à PHP combiné avec le mécanisme de file d'attente, nous pouvons éviter efficacement divers problèmes anormaux dans le processus d'envoi d'e-mail et réaliser le découplage du système, les architectures asynchrones et hautement disponibles de la tâche. Cet article prend BeanStalkd à titre d'exemple et introduit le processus complet de la configuration de l'installation, l'encapsulation de classe à une utilisation réelle, qui convient à la plupart des scénarios d'envoi de courrier PHP.