수퍼바이저가 있는 Laravel 작업자
수행하는 데 어려움을 겪고 있거나 작업이 무엇인지, 감독자가 도커 컨테이너 또는 웹 서버 내부에서 작업을 유지 관리하는 방법, 이러한 모든 항목을 설정하는 방법에 대해 알고 싶다면 올바른 게시물에 있는 것 같습니다.
유익한 정보를 알려주는 내 여정을 따르십시오.
전제 조건
php artisan queue:table
php artisan migrate
마이그레이션 후, failed_jobs & jobs라는 2개의 테이블을 찾아야 합니다. 그렇지 않으면 절차를 다시 따르거나 더 나은 이해를 위해 laravel queue을 확인하십시오.
php artisan queue:batches-table
php artisan migrate
job_batches라는 테이블이 표시되어야 합니다. 배치 작업에 대한 자세한 내용은 batch jobs laravel의 아름다운 설명서를 확인하십시오.
public function testJob() {
$path = storage_path('test');
$files = glob("$path/user.csv"); // Parse the stored csv
$header = [];
foreach ($files as $key => $file) {
$data = array_map('str_getcsv', file($file));
if($key === 0) {
$header = $data[0];
unset($data[0]);
}
}
$batch = Bus::batch([new TestCsvForSupervisor($header,
$data)->dispatch();
return $batch->id;
}
우리는 여기서 무엇을 합니까?
좋아, 예를 들어 100,000명의 사용자 정보가 포함된 csv를 가져왔습니다. 이메일, 사용자 이름, 주소 등. TestCsvForSupervisor는 삽입, 업데이트 또는 테이블과 데이터 비교와 같은 일부 검사 또는 작업을 처리하기 위한 작업 클래스입니다. 사용자. 장인의 명령을 쓰는 것처럼 간단합니다. 😉
TestCsvForSupervisor 작업 클래스에서:
public function handle()
{
try{
foreach ($this->data as $row) {
$result = array();
$result = User::whereName($row[0])->first() ? 'Found' : 'Not Found';
Log::info('User checked successfully with email: '.$row[1]);
}
} catch (Exception $err) {
Log::info('Error occured with message: '.$err);
}
}
어려운 점은 사용자 테이블에 20,000명의 사용자 정보가 있고 여기서 무엇을 했습니까? csv 데이터와 사용자 테이블 데이터를 비교하고 확인 결과를 로그에 저장합니다. 그런 다음 작업을 발송하여 수행할 보류 중인 작업을 테이블에 저장합니다.
설정 감독자
이제 2단계를 수행할 수 있는 도커 컨테이너에 관리자를 설정할 차례입니다.
둘 다 파헤치기 전에 감독자에 대한 몇 가지 세부 정보를 알려주십시오.
Supervisor is basically linux based daemon that runs in the background. You have to configure your laravel app so that supervisor know about background jobs. It monitors the executing or executable jobs and if for any interference the jobs accidentally stop ex. server down after the restarting the supervisor automatically starts the job from where it stops and monitor the failed, pending and success jobs through this time and can deliver us jobs report.
docker bash에서 설치:
sudo apt-get install supervisor
Daemon을 사용하여 Dockerfile에서 설치
app/docker-conf/php/Dockerfile에서 다음 스크립트를 작성합니다.
RUN apt-get install -y supervisor
그런 다음 docker를 빌드하고 시작합니다.
docker compose build
docker compose up -d // -d for running the docker in background
전역적으로 사용할 수 있으므로 docker 데몬 기반(step-2) 슈퍼바이저를 따르는 것이 좋습니다. 그래서 우리는 그것을 계속할 것입니다.
루트 디렉토리에서 laravel-worker.conf라는 파일을 만들고 파일을 작성하고 저장하십시오.
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /app/artisan queue:work // you may use extra attributes like --sleep=3
autostart=true
autorestart=true
# stopasgroup=true
# killasgroup=true
;user=
numprocs=8
redirect_stderr=true
stdout_logfile=/app/storage/logs/worker.log
stopwaitsecs = 100
docker bash의/etc/supervisor/디렉토리에서 Supervisord.conf라는 파일을 찾을 수 있습니다. 다음 스크립트를 사용하여 Supervisord.conf 파일의 마지막 줄을 덮어쓰고 저장합니다.
[include]
files = /etc/supervisor/conf.d/*.conf /app/laravel-worker.conf
그런 다음 다음 명령을 실행하여 감독자를 시작합니다.
# Start the service
service supervisor start
# Read the new config from supervisord file
supervisorctl reread
# Activate the configuration
supervisorctl update
# Start queue command for running jobs
supervisorctl start laravel-worker:* or laravel-worker
# Check the status of new config operation
supervisorctl status
축하합니다 🥳, laravel-job뿐만 아니라 슈퍼바이저를 사용하여 실제 자동화된 작업을 훌륭하게 수행했습니다.
아래 샷과 같이 감독자를 시작한 후 job_batches 테이블에서 상태 및 고유 ID가 있는 작업 목록을 찾을 수 있습니다.
감독관에 대한 흥미로운 사실이 하나 있습니다. 감독자를 개발하는 데 사용되는 언어를 알고 있습니까?
파이썬입니다🐍😲
Thanks for reading with so much patience. ❤️
Reference
이 문제에 관하여(수퍼바이저가 있는 Laravel 작업자), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/mzshovon/laravel-worker-with-super-visor-34ln텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)