최신판 |
당신의 편집 |
1번째 줄: |
1번째 줄: |
| ==개요== | | ==개요== |
| ;Laravel queues | | ;Laravel queues |
| ;라라벨 큐, 라라벨 대기열 | | ;라라벨 큐 |
| * 웹 애플리케이션을 빌드하는 동안 업로드된 CSV 파일의 구문 분석 및 저장과 같이 일반적인 웹 요청 중에 수행하는 데 시간이 너무 오래 걸리는 일부 작업이 있을 수 있다.
| | * 큐 시스템을 위한 통일된 API를 제공함 |
| *라라벨을 사용하면 백그라운드에서 처리될 수 있는 대기 작업을 쉽게 생성할 수 있다.
| | * 백엔드로 RDB(예: MariaDB), Beanstalk, Amazone SQS, Redis 등 사용가능 |
| * 시간 집약적인 작업을 대기열로 이동함으로써 애플리케이션은 웹 요청에 빠른 속도로 응답하고 고객에게 더 나은 사용자 경험을 제공할 수 있다.
| | * 작업들을 큐에 넣고(예약), 순차 시작되도록 하는 용도 |
| * Laravel 대기열은 [[Amazon SQS]], [[Redis]], 관계형 데이터베이스와 같은 다양한 대기열 백엔드에서 통합 대기열 API를 제공한다.
| |
| * Laravel의 대기열 구성 옵션은 애플리케이션의 config/queue.php 구성 파일에 저장된다.
| |
| * 이 파일에는 데이터베이스, [[Amazon SQS]], [[Redis]], [[Beanstalkd]] 드라이버를 포함하여 프레임워크에 포함된 각 대기열 드라이버에 대한 연결 구성과 작업을 즉시 실행하는 동기 드라이버(로컬 개발 용도). 대기열에 있는 작업을 삭제하는 <code>null</code> 대기열 드라이버도 포함되어 있다.
| |
| | |
| ==요약==
| |
| * 큐 시스템을 위한 통일된 API를 제공한다. | |
| * 드라이버(백엔드)로 RDB(예: MariaDB), Beanstalk, Amazone SQS, Redis 등 사용가능하다. | |
| :[[config/queue.php]]의 connections에 설정<ref>여러 개의 큐를 가질 수 있다. 기본은 1개</ref>
| |
| :기본값은 sync(이것은 큐가 아니므로 비동기 작업 불가, 동기작업 1건만 처리가능)
| |
| * 작업들을 큐에 넣고(예약), 순차 시작되도록 하는 용도이다. | |
| :작업의 예시: 대량 이메일 발송, 대용량 파일(예: 동영상 파일) 다운로드/업로드/변환 | | :작업의 예시: 대량 이메일 발송, 대용량 파일(예: 동영상 파일) 다운로드/업로드/변환 |
| * 수행시작시각 지정은 불가능하다. | | * 스케줄러는 아님. 수행시작시각 지정 불가능<ref>직접 구현하거나 외부스케줄러를 사용하면 가능하겠지만, 기본적으로는 불가.</ref> |
| :"큐"이므로 언제 시작될지 모르지만 FIFO (단, 우선순위, 지연시간 지정가능) | | :언제 시작될지 모르지만 FIFO (단, 우선순위 지정가능) |
| :시작시각을 지정하려면 "큐" 대신 "[[라라벨 작업 스케줄링]]" 이용하자.
| |
| | |
| ==과정==
| |
| * 과정을 간단하게 얘기하자면... 작업을 큐에 넣기(dispatch)와 처리하기(work) 2가지 단계이다.
| |
| {| class='wikitable'
| |
| | dispatch(배치) || 작업을 큐에 배치한다.
| |
| |-
| |
| | work(처리) || worker가 큐에 있는 작업을 꺼내어 처리한다.
| |
| |}
| |
| * dispatch는 웹상에서 또는 커맨드로 가능하다.
| |
| * work는 worker가 상시적으로 처리한다.
| |
| :worker 기동명령어: [[artisan queue:work]]
| |
| * 실패한 job을 [[failed_jobs 테이블]]에 보존할 수 있다.
| |
| * job 실패시 재시도하도록 할 수 있다. 기본값=0(회) = 재시도 안함
| |
| * 타임아웃 시간을 지정할 수 있다. 기본값=60(초)
| |
| | |
| ==정리==
| |
| * 1) 작업을 큐에 배치(dispatch)하는 단계와, 2) worker가 큐에 있는 작업을 처리(work)하는 단계가 있다.
| |
| * 사용자/관리자는 웹 또는 커맨드를 통해 dispatch를 수행한다.
| |
| * 관리자는 artisan queue:work 명령어로 worker를 기동한다.
| |
| :단, worker는, 소스코드 상의 결함<ref>예: 잘못된 handle 코드</ref>, 시스템 상의 문제<ref>예: 작업 중 메모리 부족</ref>으로 죽을 수 있음
| |
| :worker의 죽음을 감지하고 다시 켜도록 하기 위해 [[supervisor]]를 설치하여 사용한다.
| |
|
| |
|
| ==같이 보기== | | ==같이 보기== |
| {{z컬럼3|
| |
| * [[큐(queue)]]
| |
| * [[라라벨]] | | * [[라라벨]] |
| * [[메시지 큐]] | | * [[메시지 큐]] |
| * [[라라벨 큐]]
| |
| * [[라라벨 config/queue.php]]
| |
| * [[Laravel Horizon]]
| |
| * [[라라벨 작업 스케줄링]]
| |
| * [[라라벨 큐 워커 상태 확인]]
| |
| }}
| |
|
| |
|
| ==참고== | | ==참고== |
| * https://laravel.com/docs/master/queues | | * (한국어) https://laravel.kr/docs/5.5/queues |
| * http://laravelcoding.com/blog/laravel-5-beauty-sending-mail-and-using-queues | | :(영어) https://laravel.com/docs/5.5/queues |
| | * (영어) http://laravelcoding.com/blog/laravel-5-beauty-sending-mail-and-using-queues |
|
| |
|
| [[분류: 라라벨 큐]] | | [[분류: Laravel]] |