実際の開発では、電子メールの送信の失敗は、一時的なサーバーの障害、ネットワークの中断、SMTP応答遅延など、システムの安定性を向上させるなど、一般的な問題です。キューに電子メールタスクを追加し、独立したバックグラウンドプロセスによって非同期にプロセスして、ビジネスプロセスをブロックしないようにすることができます。
この記事では、BeanStalkdをPHPメールキューの構築方法を説明する例として説明します。
最初にbeanstalkdをインストールします:
sudo apt-getインストールbeanstalkd
サービスを開始します:
sudo systemctlはbeanstalkdを始めるします
PHP BeanStalkd拡張機能をインストールします。
PECLインストールBeanStalkd
php.iniに拡張設定を追加します:
extension = beanstalkd.so
PHPサービスの再起動:
sudo systemctlはphp-fpmをもう一度始めましょうします
メールを送信してキューを聴くためのクラスを作成します。
クラスのmailqueue { 守るされた$ beanStalk; パブリック関数__construct() { $ this-> beanstalk = new Pheanstalkpheanstalk( '127.0.0.1'); } public function sendemail($ email、$ subject、$ message) { //キューにメールタスクを追加する$ this-> beanstalk-> useTube( 'mail_queue') - > put(json_encode([[) 「電子メール」=> $メール、 'subject' => $件名、 「メッセージ」=> $メッセージ、 ])); } public function handleemails() { //キューを匂いいて、メールの送信ロジックを処理します(true){ $ job = $ this-> beanstalk-> riseverfromtube( 'mail_queue'); $ data = json_decode($ job-> getData()、true); //電子メールロジック、$ this-> sendemail($ data ['email']、$ data ['subject']、$ data ['message'])の特定の実装を送信します。 //タスクを削除$ this-> beanstalk-> delete($ job); } } }
クラス内のメソッドを呼び出して、メールをキューにします。
$ mailqueue = new Mailqueue(); $ mailqueue-> sendemail('example@example.com '、' mail subject '、' mail content ');
スーパーバイザーは、一般的に使用されるプロセスデーモンツールであり、キューリスニングスクリプトが実行され続けることを保証します。
[プログラム:mail_queue_worker] command = php/path/to/mail_queue_worker.php ディレクトリ=/path/to/project ユーザー= www-data numprocs = 1 autostart = true autorestart = true process_name =%(program_name)s _%(process_num)02d Redirect_stderr = true
/path/to/mail_queue_worker.phpを独自の処理スクリプトパスに置き換えて、プロセスが引き続きバックグラウンドでメールを聞き、処理することを確認します。
キューメカニズムと組み合わせたPHPを通じて、電子メール送信プロセスのさまざまな異常な問題を効果的に回避し、システム分離、タスクの非同期、および非常に利用可能なアーキテクチャを実現できます。この記事では、BeanStalkDを例として取り上げ、インストール構成、クラスのカプセル化から実際の使用までの完全なプロセスを紹介します。これは、ほとんどのPHPメール送信シナリオに適しています。