청취자가 붙을 끝에 이벤트를 브로드 캐스트 할 수 있습니다. 그러면 청취자는 작업을 다시 수행 할 작업을 파견합니다.
php artisan make:job LoopUserPosts
$posts = $user->posts;
$posts->each(function($post){
//your work on your post
if($post->id === $posts->count()){
// broadcast your event here
event(App\Events\UserPostsLoopEnded, [$post->user]);
}
});
이벤트는 다음과 같이 보일 수 있습니다 :
php artisan make:event UserPostsLoopEnded
class UserPostsLoopEnded extends Event
{
use SerializesModels;
public $user;
public function __construct(App\User $user)
{
$this->user = $user;
}
}
그런 다음 우리는 설정에 청취자가 필요합니다
php artisan make:listener HandleUserPostsLoopEnded --event="UserPostsLoopEnded"
use App\Events\UserPostsLoopEnded;
class HandleUserPostsLoopEnded
{
public function __construct()
public function handle(UserPostsLoopEnded $event)
{
//now we can just dispatch the job again
dispatch(App\Jobs\LoopUserPosts, [$event->user]
}
}
그런 다음 물론 당신은
attach the listener
해야합니다. 계속 진행하여
App\Providers\EventServiceProvider
을 연 다음 이벤트와 청취자를
$listen
배열에 추가해야합니다.
protected $listen = [
//.....
'App\Events\UserPostsLoopEnded' => [
'App\Listeners\HandleUserPostsLoopEnded',
],
];
이제 완전한 결론을 맺었습니다. 일단 작업이 끝나면 이벤트를 브로드 캐스트합니다. 청취자는 일단 해고되면 이벤트를 수신합니다. 그러면 리스너는 작업을 다시 보내 사용자에게 전달합니다.
일반적으로 대기열 작업은 백그라운드에서 장기 실행 프로세스를 처리하기위한 것입니다. 일반적인 대기열 작업의 예로는 파일 업로드 또는 비디오 인코딩과 같은 작업이 있습니다. 나는 무엇보다 호기심이 많습니다. 왜 포스트 레코드를 가져 오는 것을 처리하기 위해 큐 작업이 필요하다고 생각합니까? 심지어 큐를 영원히 계속 실행하는 이유는 무엇입니까? 유스 케이스를 좀 더 자세히 설명해 주시겠습니까? – maiorano84
각 사용자의 게시물에 대해 작업을 수행하며이 작업을 계속해야합니다. 사용자 목록이 매우 짧고 게시물 수가 적음을 알고 있어야합니다. – user6592471