Laravel 8의 대기열 시스템에 적용되는 기능 및 변경 사항
10480 단어 laravel
변경 사항
물러나 다
retryAfter()
메서드와 대기 중인 작업, 메일러, 알림 및 수신기의 retryAfter
속성이 backoff
로 이름이 변경되었습니다.--delay
명령의 php artisan queue:work
옵션도 --backoff
로 이름이 변경되었습니다.또한 이제 작업자에게 지수 백오프를 구현하도록 지시하기 위해
backoff
속성에 배열을 전달할 수 있다는 것도 알아야 합니다.public $backoff = [30, 60];
또는
backoff()
메서드에서 배열을 반환합니다.public function backoff ()
{
return [30, 60];
}
여기에서 지수 백오프를 사용하여 작업자에게 첫 번째 실패 후 작업 재시도를 30초 지연하고 그 후 각 실패에 대해 60초를 지연하도록 지시했습니다.
queue:work
명령에 지수 백오프를 사용할 수도 있습니다.php artisan queue:Work --backoff=30,60
작업 만료
대기 중인 작업, 알림 및 리스너의
timeoutAt
속성이 retryUntil
로 이름이 변경되었습니다.$retryUntil
를 사용하면 작업자가 미래의 특정 시간까지 작업을 계속 재시도하도록 지시합니다.작업 클래스 또는
retryUntil
메서드의 공용 속성으로 retryUntil
를 추가할 수 있습니다.public function retryUntil()
{
return now()->addDay();
}
새로운 기능
대기 중인 클로저
이제 대기열에 있는 클로저를 전달하는 동안
catch()
메서드를 연결할 수 있습니다.dispatch(function () {
// Job logic...
})->catch(function (Throwable $e) {
// Handle Failure...
});
작업이 실패하면
catch()
메서드에 제공된 클로저가 호출됩니다.데이터베이스 드라이버 안정성
데이터베이스 큐 드라이버를 사용하는 동안 큐에 작업을 다시 릴리스할 때 Laravel은 이제 트랜잭션 내에서 작업을 수행합니다. 즉, 새로운 릴리스 인스턴스가 추가되지 않는 한 작업이 대기열에서 삭제되지 않습니다. 이것은 직업을 잃을 가능성을 크게 줄입니다.
Redis 드라이버 효율성
redis 큐 드라이버를 사용하는 동안 작업 그룹을 대량으로 디스패치할 때 Laravel은 redis에 단일 명령을 전송하여 작업을 수행합니다. 이전에 Laravel은 여러 명령
rpush
을 redis에 보내는 데 사용되었습니다. 각 작업에 대해 하나씩.작업자 정상 종료
Laravel 8부터 작업자는 정상적으로 종료되고
App::terminating()
에 의해 등록된 종료 콜백을 호출합니다.근로자 자기 종료
메모리 누수를 방지하기 위해 때때로 작업자를 종료하고 프로세스 모니터링 도구가 새 작업자를 시작하도록 하는 것이 일반적입니다. 이것은 일반적으로
queue:restart
artisan 명령을 실행하는 CRON 작업을 추가하여 수행되었습니다.Laravel 8에서는 특정 수의 작업을 처리한 후 또는 특정 시간(초) 동안 실행한 후 작업자에게 종료하도록 지시할 수 있습니다.
php artisan queue:work --max-jobs=1000 --max-time=3600
작업자 이름 지정
이제
--name
명령에 queue:work
옵션을 추가할 수 있습니다.php artisan queue:work --name=notifications
이 기능은 주로 작업자가 런타임에 작업을 처리할 대기열을 선택하는 방법을 사용자 지정할 수 있도록 추가되었습니다.
Worker::popUsing('notifications', function ($pop) {
$queues = time()->atNight()
? ['mail', 'webhooks']
: ['push-notifications', 'sms', 'mail', 'webhooks'];
foreach ($queues as $queue) {
if (! is_null($job = $pop($queue))) {
return $job;
}
}
});
작업 배치
Laravel의 작업 일괄 처리를 사용하면 작업자가 병렬로 처리할 여러 작업을 파견할 수 있습니다. 배치의 모든 작업이 처리된 후 또는 배치 작업 중 하나가 실패한 경우 작업을 수행할 수 있습니다.
Bus::batch([
new ProcessFile(1),
new ProcessFile(2),
new ProcessFile(3),
])->dispatch();
작업 일괄 처리에 대한 자세한 내용은 official documentation 에서 찾을 수 있습니다.
작업 체인
이제
Bus
파사드를 사용하여 일련의 작업을 전달할 수 있습니다.Bus::chain([
new ExtractReports,
new GenerateReport,
new SendResults,
])->dispatch();
체인의 작업 중 하나라도 실패하면 호출되는
catch()
콜백을 추가할 수도 있습니다.Bus::chain([
new ExtractReports,
new GenerateReport,
new SendResults,
])->catch(function(){
// Handle the chain failure.
})
->dispatch();
호라이즌 밸런싱 비율
두 가지 새로운 구성 옵션이 Horizon에 추가되었습니다.
balanceMaxShift
및 balanceCooldown
. 'environments' => [
'environment' => [
'supervisor-1' => [
'balanceMaxShift' => 5,
],
],
],
balanceMaxShift
Horizon이 작업자 풀을 확장할 때마다 추가하거나 제거할 작업자 프로세스의 최대 수를 설정합니다. Horizon의 이전 버전에서는 단일 작업자만 추가되거나 제거되었지만 이제 해당 수를 제어할 수 있습니다.balanceCooldown
의 경우 각 스케일링 작업 사이에 대기할 시간(초)을 설정합니다. 이는 이전 버전의 Horizon에서 3초로 하드 코딩되었습니다. 'environments' => [
'environment' => [
'supervisor-1' => [
'balanceCooldown' => 1,
],
],
],
Reference
이 문제에 관하여(Laravel 8의 대기열 시스템에 적용되는 기능 및 변경 사항), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/themsaid/features-and-changes-coming-to-laravel-8-s-queue-system-5amg텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)