저는 laravel 4.2를 사용하는 프로젝트를 진행 중이며 Beantalk 대기열에 작업을 보내고 있습니다. 작업자가 실행할 작업을 선택하면 작업 ID를 캡처하고 작업이 실패 할 경우이를 failed_jobs 테이블에 다시 연결하려고합니다.
문제는 Pheanstalk_Job->getId()
메서드 에서 반환 된 ID가 failed_jobs
테이블 의 항목 ID와 일치하지 않는다는 것 입니다.
나는 두 사람이 상관 관계가 있다고 생각하는데 주제 넘을 수있다. 그렇지 않다면 누군가가 내가 작업과 관련된 failed_jobs 레코드의 ID를 캡처하는 방법을 도울 수 있기를 바랍니다.
궁극적으로 작업 실패를 유발 한 예외와 failed_jobs
테이블에 생성 된 항목 사이의 상관 관계를 생성하는 솔루션 에는 다음 단계가 포함되었습니다.
'queue.failer'
및 'queue.worker'
서비스를 바인딩했습니다 . 내 '실패'구현은를 확장 Illuminate\Queue\Failed\DatabaseFailedJobProvider
하고 단순히 beantalkd 작업 ID를 포함하는 삽입을 수행하는 방법을 추가합니다. 내 '작업자'구현은를 확장하고 메서드를 Illuminate\Queue\Worker
재정 의하여 logFailedJob
실패한 작업 삽입 메서드를 호출합니다.app/config/queue.php
내가 포함, 'failed' => ['database' => 'mysql', 'table' => 'exception_failed_jobs']
'exception_failed_jobs'라고 내 자신의 실패한 작업 테이블을 사용하는 laravel 말할 수 있습니다.이제 발생한 모든 예외는 작업 ID를 통해 실패한 작업 레코드와 상관 관계가 있습니다. 이제 비즈니스는 작업 실패를 유발 한 예외를 확인하고 근본적인 문제를 수정하고 실패한 작업을 다시 시도할지 아니면 단순히 대기열에서 삭제할지 결정할 수 있습니다. 이 솔루션을 테스트했으며 필요한대로 정확히 작동합니다. 바라건대 이것은 동일한 요구 사항을 가진 다른 사람들에게 도움이되기를 바랍니다.
이 프로젝트를 4.2에서 최신 버전으로 마이그레이션하기를 기다릴 수 없습니다. 최신 laravel에 이미이 기능이 포함되어 있음을 알고 있습니다. :)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다