2017-12-12 2 views
0

laravel 응용 프로그램에 서비스 공급자를 연결하기위한 타사 라이브러리가있는 서비스를 설정하려고합니다. 내 목표는 laravel 큐 노동자를 통해 메시지를 전송하는 동안 연결 연결을 유지하기 위해laravel 대기열 작업자의 지속적인 연결

$connection = new CustomConnection(); 
$connection->refresh(); 
$connection->sendMessage('[email protected]', ['message'=>'something', 'ttl'=>3600]); 
$connection->refresh(); 
$connection->sendMessage('[email protected]', ['message'=>'something', 'ttl'=>3600]); 
$connection->close(); 

입니다 다음과 같이

그 코드는 간다. 가야 노동자

$connection = new CustomConnection(); 
$connection->refresh(); 

을 설정하면 같은

뭔가 작업이 대기열에 추가 될 때마다 &이 코드의

$connection->sendMessage('[email protected]', ['message'=>'something', 'ttl'=>3600]); 
$connection->refresh(); 

블록을 실행해야 $connection->refresh() 5 초마다를 실행합니다.

laravel의 핵심 큐가 백엔드에서 어떻게 작동하는지 그리고 기능과 방법을 재정의 할 수 있는지에 대한 실마리가 없습니다.

감사합니다.

답변

0

서비스 제공 업체에서 싱글 톤으로 연결 (또는 연결을 사용하는 서비스)을 등록하십시오. 이 작업을 종속성으로 선언하면 모든 작업이 대기열 작업자의 수명 동안 동일한 연결/서비스 인스턴스를 갖게됩니다.

5 초마다 $ connection-> refresh()를 실행할 수있는 방법이 없습니다. 이 호출의 목적이 heartbeat/healthcheck의 일종 인 경우 queue-related events을 수신하고 대신 사용하십시오. JobProcessing, JobProcessed, JobFailed 및 Looping을 조합하면 작업 실행 전후에 코드를 실행할 수 있습니다. 당신은 $ connection-> refresh()를 호출해야하는지, 예를 들어 마지막 호출 이후로 적어도 5 초가 지난 것처럼 평가할 수있다.

작업이 발송 될 때 코드를 실행하는 데 사용할 수있는 이벤트가 없습니다.

대기열 시스템의 내부 작동을 무시하지 마십시오. 서로 다른 Laravel 릴리스간에 이전 버전과의 호환성에 대한 약속은 없으며 업스트림에 소개 된 모든 (가능한) 미묘한 변경 사항을 추적해야합니다.