실제 개발에서 이메일을 보내지 않으면 임시 서버 실패, 네트워크 중단, SMTP 응답 지연 등과 같은 일반적인 문제입니다. 시스템 안정성을 향상시키기 위해 큐에 이메일 작업을 추가하여 독립적 인 배경 프로세스를 통해 비동기 프로세스를 사용하여 비동기 프로세스를 차단하지 않도록 처리 할 수 있습니다.
이 기사는 PHP 전자 메일 큐를 구축하는 방법을 설명하기위한 Beanstalkd를 예로 들어 본다.
먼저 beanstalkd를 설치하십시오.
sudo apt-get install beanstalkd
서비스 시작 :
sudo systemctl 시작 beanstalkd
PHP Beanstalkd 확장자 설치 :
PECL Beanstalkd를 설치하십시오
php.ini에서 확장 구성 추가 :
Extension = beanstalkd.so
PHP 서비스 다시 시작 :
sudo systemctl php-fpm을 다시 시작합니다
메일을 보내고 대기열을 듣기위한 수업을 만듭니다.
클래스 메일 큐 { 보호 된 $ beanstalk; 공개 기능 __construct () { $ this-> beanstalk = 새로운 SheanstalkPheanstalk ( '127.0.0.1'); } 공개 기능 SendEmail ($ 이메일, $ 주제, $ 메시지) { // 큐에 메일 작업을 추가하십시오 $ this-> beanstalk-> usetube ( 'mail_queue')-> put ( '이메일'=> $ 이메일, '주제'=> $ 주제, '메시지'=> $ 메시지, ])); } 공개 기능 핸들 메일 () { // 대기열을 듣고 (true) {true) while while while while while while $ job = $ this-> beanstalk-> ReserveFromTube ( 'mail_queue'); $ data = json_decode ($ job-> getData (), true); // 이메일 로직, $ this-> sendEmail의 특정 구현 ($ data [ 'email'], $ data [ 'subject'], $ data [ 'message']); // 작업 $ 삭제 $ this-> beanstalk-> delete ($ job); } } }
클래스에서 메소드를 호출하여 이메일을 대기합니다.
$ mailqueue = 새로운 mailqueue (); $ mailqueue-> sendemail ( 'example@example.com', 'mail prituble', 'mail content');
Supervisor는 일반적으로 사용되는 프로세스 데몬 도구로 큐 청취 스크립트가 계속 실행되도록합니다.
[프로그램 : mail_queue_worker] 명령 = 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 메일 전송 시나리오에 적합합니다.