2016-08-15 4 views
0

클래스에서 ShouldQueue와 Sync를 어떻게 전환합니까?대기열과 대기열 간 Laravel 전환

우리는 작업을 즉시 또는 나중에 실행해야하는지 여부에 대한 인수를 허용합니다.

두 경우 모두 동일한 논리를 실행해야하지만 한 시나리오에서는 예상대로 응답하고 다른 하나는 비동기로 처리해야합니다.

"ShouldQueue"를 구현하고 "InteractsWithQueue"-Trait를 사용하고 있음을 알고 있지만 한 상황에서는 어떻게 사용하고 다른 상황에서는 사용하지 않을 수 있습니까?

요청을 대기열에 넣을지 여부를 프로그래밍 방식으로 설정할 수 있습니까? 아니면 더 좋은 방법이 있습니까? 컨트롤러에서 감사

+0

아직 자신이 테스트하지 않았습니다

use Illuminate\Contracts\Bus\Dispatcher; // Later ... app(Dispatcher::class)->dispatchNow($job); 
수 있지만, 작업 클래스를 인스턴스화하고 즉시 실행해야하거나 "온라인"이라면 컨트롤러에서'handle()'메소드를 호출하면됩니까? 대기열에서 실행하거나 "오프라인"으로 실행하려면 디스패처를 사용하여 정상적으로 대기열에 대기열로 두십시오. – stratedge

+0

@xjstratedgebx 예,이 방법은 작동하지만 두 경우 모두 변수를 전달하는 방법은 무엇입니까? 디스패치 케이스에서는 생성자에서 핸들 케이스의 handle 메소드가 필요합니다. – hogan

+0

서비스 컨테이너 (예 :'$ job = app (\ App \ Jobs \ MyJob :: class);)를 통해 작업 클래스를 해결하면 생성자에 힌트를 입력 한 모든 클래스가 자동으로 전달됩니다. 'handle()'을 수동으로 호출하고 매개 변수를 전달해야한다면 매개 변수를 호출 할 때 매개 변수를 전달하십시오. 대기열에 넣을 때 매개 변수에 대해 걱정할 필요가 없습니다. 서비스 컨테이너가 대기열에서 실행될 때 매개 변수를 자동으로 주입합니다. – stratedge

답변

2

: Laravel 5.1에 붙어있는 경우

$this->dispatch($job) // queued if implements ShouldQueue 

$this->dispatchNow($job) // never queues 

Dispatcher 자신의 새 인스턴스를 만들 :

+0

안녕하세요. 요셉입니다. 이것이 사실 일 것입니다. dispatchNow는 함수가 아닙니다. 이 작업을하려면 다른 것이 필요합니까? – hogan

+0

@hogan Laravel의 어느 버전을 사용하고 계십니까? 적어도 5.2에 있습니다 ([here] (https://laravel.com/api/5.2/Illuminate/Foundation/Bus/DispatchesJobs.html#method_dispatchNow) 참조). 그것이하는 것은 app (\ Illuminate \ Contracts \ Bus \ Dispatcher :: class) -> dispatchNow ($ job); –

+1

@hogan - 이전 버전의 Laravel에서 업그레이드 한 경우 컨트롤러에서 'Illuminate/Foundation/Bus/DispatchesJobs'특성을 사용해야합니다. –