아무거나

event & queue 본문

PHP/Laravel

event & queue

전봉근 2019. 4. 5. 11:45
반응형

[laravel event & queue]

   준비

   - https://www.xpressengine.com/devlog/23038445 -> 5번관련자료

   - /etc/hosts에 테스트에 필요한 도메인 설정

   - homestead가 아닌경우, beanstalkd를 설치

     # 리눅스의 경우, apt-get install beanstalkd

     # 맥의 경우, brew install beanstalkd

   - Ratchet(검색어: 구글에서 "ratchet php"), BrainSocket(검색어: 구글에서 "brainsocket php")찾아보기

 

   * 사용용도

   이벤트를 엄청나게 많이 보내야될 상황에서 큐를 사용한다.

   -> 백그라운드에서 대용량 파일을 처리한다던가 이메일을 보낸다던거 그런류의 오래걸리는 작업들을 전부 큐로 밀어버리고 성능을 향상시킬 수 있다.

 

   (1) 느려지는 상황을 가정하기 위하여 Handlers/Events/AlertToMenByEmail.php 에서 handle메서드에 sleep() 함수를 주어 느려지는 상황을 가정한다.

   (2) 프로세스 비교

       [기존 프로세스]

              (1.로그인요청)            (2.Email로 알림)

       사용자 ㅡㅡㅡㅡㅡㅡ>   웹서비스   ㅡㅡㅡㅡㅡㅡ>   관리자

              <ㅡㅡㅡㅡㅡㅡ              <ㅡㅡㅡㅡㅡㅡ

   (4.메인페이지로이동)         (3.Email작업완료)

 

       [변경할 프로세스]

              (1.로그인요청)        (워커에게작업전달)    (1.Email로 알림)

       사용자 ㅡㅡㅡㅡㅡㅡ>   웹서비스  ㅡㅡㅡㅡㅡ> 워커  ㅡㅡㅡㅡㅡㅡ>   관리자

              <ㅡㅡㅡㅡㅡㅡ                               <ㅡㅡㅡㅡㅡㅡ

   (2.메인페이지로이동)                           (2.Email작업완료)

 

* 워커를 사용하여 큐에 전달한다.

  그리고 큐에는 이런 서비스들이 존재한다( Beanstalk, AmazonSQS, IronMQ, ZeroMQ, RabbitMQ )

  laravel에서는 Beanstalk, AmazonSQS, IronMQ 까지만 지원된다.

 

1. EVENT를 큐로 구현한다.

   * Event Class BeautyLogined -> laravel -> Queue(Beanstalk) -> laravel워커 -> Handler Class AlertToMenByEmail

 

   - composer require pda/pheanstalk 라이브러리 추가(php에서 beanstalk를 사용하기 위한 라이브러리)

   - Handlers/Events/AlertToMenByEmail.php 소스 수정

     [소스내용]

namespace App\Handlers\Events;

 

use App\Events\BeautyLogined;

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Support\Facades\Log;

 

// 큐 사용 설정

class AlertToMenByEmail implements ShouldQueue

{

    public function __construct() {

 

    }

 

    public function handle(BeautyLogined $event) {

// 느려지는 상황 가정

sleep(10);

 

// 모든 내용이 처리되었음을 알리는 로그 출력

Log::info($event->getIpAddress() . " , 알람 메일 전송을 완료하였습니다.");

    }

}

 

   - .env 수정

     [내용]

     QUEUE_DRIVER=sync -> QUEUE_DRIVER=beanstalkd 로 변경하자

   - php artisan queue:listen  // laravel 워커 실행(http://laravel.com/docs/5.1/queues#running-the-queue-listener)

     -> 백단에서 돌고있어서 실행해도 결과값은 안뜬다.​ 

반응형

'PHP > Laravel' 카테고리의 다른 글

사용자 인증(authentication) 예제  (0) 2019.04.05
event 기능  (0) 2019.04.05
파일업로드  (0) 2019.04.05
Eloquent + Pagination 사용  (0) 2019.04.05
validator(유효성검증)  (0) 2019.04.04
Comments