リスナーが接続された最後のイベントをジョブでブロードキャストできます。このリスナーは仕事を再開するために仕事を送ります。
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