이벤트 탐지기의 줄 서기와 작업 실행 단위

5998 단어 Laravel
이 글은 Laravel Advent Calendar 2019 6일째 글이다.
Laravel은 이벤트 발표, 이벤트 탐지기 줄 서기, 이미 투입된 작업 수행 등 기능을 제공했지만 최근 줄 서기 작업의 실행 단위를 잘못 알고 실패한 경우나는 이 문장에서 사건 작업 대기열을 다시 쓰고 싶다

1. 사건 탐지기가 무엇입니까

  • 어떤 동작이나 변경이 발생했을 때 보내는 처리
  • 사건이 발생하고 검출될 때 탐지기라고 불리는 사건에 대응하는 처리를 수행
  • 탐지기의 처리는 대기열에 불러와서 비동기적으로 실행할 수 있다
  • 문서활동x Laravel
  • 2. 작업 대기열

  • 대기열은 대기열입니다.비동기식 처리 대기 처리 목록
  • 처리된 실행 단위를 작업
  • 이라고 합니다.
  • 문서클럽x Laravel
  • 3. 스태프

  • 대기열에 쌓인 작업은 비동기식으로 순서대로 처리되지만 이때 비동기적으로 작업을 수행하는 프로그램은 작업자(Worker)
  • 라고 합니다.
  • 작업자(Worker)도 작업 수행 실패 시 재시도 처리
  • 4. 실패

  • 서비스를 사용하는 모든 사용자에게 메일을 보내고 싶은 경우 아래 코드
  • 를 썼다
  • 작업자(Worker) 최대 10회, 실패해도 최대 10회 재시도
  • 이벤트 제출event 이벤트의 실례를 조수에게 전달할 때 이벤트 발표
  •     /**
         * メール通知
         * @param $notification
         */
        private function triggerEvent($notification)
        {
            // メール送信用にEvent登録する
            event(new Notification($notification));
            return;
        }
    
  • 감청 프로그램 처리
  • class UserEventSubscriber implements ShouldQueue
    {
        public function subscribe(Dispatcher $dispatcher)
        {
        }
    
        public function handle(Notification $event)
        {
            $event->send();
        }
    }
    
  • $event->send() 처리
  •     public function send(): void
        {
            // ユーザーを全取得
            $users = User::all();
    
            // メール通知
            foreach ($users as $user) {
                \Mail::to($user->email)->queue(new EventMail($this->notification));
            }
        }
    
  • 상기 코드 사례의 문제점은 메일 발송에 실패한 사용자가 존재하는 상황에서 재시도에 성공한 나머지 사용자에게도 다시 통지
  • 대기열에 쌓인 이벤트 탐지기 처리에서 대기열에 쌓인 메일을 보내는 처리가 존재하고 실패할 때의 재시험 단위를 실패한 메일을 보내는 단위로 오인한다
  • 정확한 방법은 이벤트 호출된 탐지기 단위로 줄을 서는 것이다
  • 탐지기가 이벤트에 호출되면 Laravel 대기열 시스템을 사용하고 이벤트 대상 패키지가 자동으로 대기열에 넣습니다

    총결산

  • 이벤트, 작업(Job), 대기열(Queue)의 구조, 코드 자체의 변경처 이외에 인프라, 작업자(Worker)의 설정 등을 정확하게 인식하지 못하면 약간의 오해로 인해 큰 오류가 발생할 수 있음
  • 매우 초보적인 부분에서의 실패와 문서에 쓰인 내용을 직접 소개한 기사이지만 활동, 작업(작업), 대기열(Queue)의 구조를 배웠으니 다행이다
  • 다음에 이 구조를 제공하는 라벨의 코드를 읽고 싶은데 어떤 구조로 행동하는지 이해할 수 있다
  • 참고 자료

  • 클럽x Laravel
  • 활동x Laravel
  • 좋은 웹페이지 즐겨찾기