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.
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
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); } } }
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 ');
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.
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.