본문 바로가기

개발/PHP 라라벨

라라벨 큐 & Database 사용하기

특정 작업을 비동기적으로 처리해야 할 일이 생겼습니다.

라라벨의 큐를 사용하기 위해서는 드라이버를 선택해야하는데 기존에 mysql 을 사용중이었기때문에 database 로 설정했습니다.

 

버전


laravel 9.x

PHP 8.0

 

 

DB 테이블 추가


Job을 담아둘 데이터베이스 테이블을 아래와 같이 생성합니다.

 

php artisan queue:table
php artisan migrate --path=database/migrations/create_jobs_table.php

실패한 Job 에 대한 정보를 담아둘 테이블을 아래와 같이 생성합니다.

php artisan queue:failed-table
php artisan migrate --path=database/migrations/create_failed_jobs_table.php

 

.env 설정


QUEUE_CONNECTION=database

 

Job 파일 생성 및 호출


php artisan make:job JobTreatment

위 명령어를 터미널에서 입력하면 app/Jobs 폴더아래에 JobTreatment.php 파일이 생성됩니다.

아래와 같이 handle 함수내에 원하는 작업을 코딩하시면 됩니다.

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        Log::info("Treatment");
    }

해당 job 을 실행하기 위해서는 아래와 같이 호출해줍니다.

JobTreatment::dispatch();

만약 전달해야할 파라메타가 있는 경우 dispatch 함수 호출시 전달하고 JobTreatment.php 파일내의 __construct 함수에서 받아서 처리하시면 됩니다.

 

 

큐 워커 실행


큐 워커는 큐에서 job 을 가져와 실제 실행하는 프로세스입니다. 

job 이 DB 에 쌓여 있으면 그것을 가져와 순차적으로 처리합니다.

터미널에서 아래의 명령어로 실행할 수 있습니다.

php artisan queue:work

 

 

Supervisor 설치 및 실행


로컬에서는 큐 워커 실행만으로 테스트가 가능한데 실제 운영 서버에서는 Supervisor 를 설치해야 합니다.

Supervisor 는 설정파일에 따라 큐 워커를 실행하고 모니터링하여 프로세스가 중지되었을때 다시 시작 시킵니다.

아래는 우분투 서버에서 supervisoer 설치 명령어입니다.

sudo apt-get install supervisor

 

아래와 같은 설정파일을 만들어 큐 워커를 관리할 수 있습니다.

/etc/supervisor/conf.d/laravel-worker.conf

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /web/app.com/artisan queue:work
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
;user=forge
numprocs=10
redirect_stderr=true
stdout_logfile=/web/log/worker.log
stopwaitsecs=3600

numprocs 값을 변경하여 큐 워커의 프로세스 개수를 지정할 수 있습니다.

 

마지막으로 supervisor 를 실행해야 큐워커가 실행되므로 아래와 같이 supervisor 를 실행합니다.

sudo supervisorctl start laravel-worker:*

아직 로컬에서만 큐를 실행해보고 운영서버에는 적용하지 않았습니다.

해보고 변경사항이 있으면 다시 글을 수정하도록 하겠습니다.

 

추가내용


운영서버가 CentOS7 이라서 설정 파일을 아래의 폴더에 저장했습니다.

/etc/supervisord.d/laravel-worker.ini

 

supervisor 설정 파일 위치

/etc/supervisord.conf

 

설정파일의 내용을 보면 하단에 아래와 같이 추가 파일 설정값이 있어 라라벨 큐 실행 설정 파일을 ini로 추가했습니다.

변경이 필요하시면 아래의 값을 변경하시면 됩니다.

 

[include]
files = supervisord.d/*.ini

 

그리고 CentOS7 에서 실행방법은 아래와 같습니다.

sudo systemctl start supervisord

 

이상입니다~