In der tatsächlichen Entwicklung ist das Versagen von E -Mails ein häufiges Problem, z. B. temporärer Serverausfall, Netzwerkunterbrechung, SMTP -Antwortverzögerung usw. Um die Systemstabilität zu verbessern, können wir der Warteschlange E -Mail -Aufgaben hinzufügen und sie durch unabhängige Hintergrundprozesse asynchron verarbeiten, um die Blockierung von Geschäftsprozessen zu vermeiden.
Dieser Artikel nimmt Beantalkd als Beispiel für die Erstellung einer PHP -E -Mail -Warteschlange.
Installieren Sie zuerst Beanstalkd:
sudo apt-Get installieren Beanstalkd
Starten Sie den Service:
sudo systemctl starten beanstalkd
Installieren Sie die PHP -Beantalkd -Erweiterung:
Pecl installieren Sie Beanstalkd
Erweiterungskonfiguration in php.ini hinzufügen:
Erweiterung = BeaneStalkd.so
Starten Sie den PHP -Service neu:
sudo systemctl starten Sie PHP-FPM neu
Erstellen Sie eine Klasse zum Senden von E -Mails und zum Anhören von Warteschlangen:
Klassenpostqueue { geschützte $ beanstalk; Öffentliche Funktion __construct () { $ this-> beAandalk = new PheAnstalkPheAnstalk ('127.0.0.1'); } öffentliche Funktion Sendemail ($ mail, $ Betreff, $ message) { // E-Mail-Aufgaben zur Warteschlange hinzufügen $ this-> beanstalk-> usetube ('mail_queue')-> put (json_encode ([[ 'E -Mail' => $ E -Mail, 'Betreff' => $ Betreff, 'meldung' => $ message, ])); } öffentliche Funktionshandel () { // Hören Sie sich Warteschlangen an und verarbeiten Sie E -Mails Senden von Logik, während (true) {{ $ job = $ this-> beanstalk-> ReserveFromTube ('mail_queue'); $ data = json_decode ($ job-> getData (), true); // E-Mail-Logik senden, die spezifische Implementierung von $ this-> sendemail ($ data ['mail'], $ data ['Betreff'], $ data ['message']); // die Aufgabe löschen $ this-> beanstalk-> löschen ($ job); } } }
Rufen Sie Methoden in der Klasse an, um sich an der E -Mail in die Warteschlange zu stellen:
$ mailQueue = new Mailqueue (); $ mailQueue-> sendemail ('example@example.com ',' Mail-Betreff ',' Mail-Inhalt ');
Supervisor ist ein häufig verwendetes Prozess -Daemon -Tool, das sicherstellt, dass Warteschlangenhörskripte weiter ausgeführt werden.
[Programm: mail_queue_worker] command = php /path/to/mail_queue_worker.php Verzeichnis =/path/to/project user = www-data numprocs = 1 autostart = true autorestart = true process_name =%(programm_name) s _%(process_num) 02d redirect_stderr = true
Ersetzen Sie /pat/to/mail_queue_worker.php durch Ihren eigenen Verarbeitungsskriptpfad, um sicherzustellen, dass der Prozess weiterhin E -Mails im Hintergrund anhört und verarbeitet.
Durch PHP in Kombination mit dem Warteschlangenmechanismus können wir verschiedene abnormale Probleme im E -Mail -Sendeprozess effektiv vermeiden und die Systementkopplung, die asynchrone Aufgabe erkennen. Dieser Artikel nimmt als Beispiel BeaneStalkd und führt den vollständigen Vorgang aus der Installationskonfiguration, der Klassenkapselung bis zur tatsächlichen Verwendung ein, die für die meisten PHP -E -Mail -Senden -Szenarien geeignet ist.