📝
Laravelのリスナを非同期で動かす
EventとListenerを作成して非同期で実行させるまでの流れを記載します
結論
- jobsテーブルを作成する
- EventとListenerを作成する
- .envの
QUEUE_CONNECTION
を設定する - Listenerクラスに
ShouldQueue
インターフェイスをimplementsすることで非同期処理が可能
環境
laravel 10
前準備
jobsテーブルを作成
最初にキューを実行するためのjobs
テーブルを用意します
php artisan queue:table
php artisan migrate
Eventクラス作成
次にlistenerが実行される起点となるEventクラスを作成します
php artisan make:event HogeEvent
Listener作成
Eventが発行された後に実行されるListenerクラスを作成します
php artisan make:listener FugaListener --event=HogeEvent
.envを編集
QUEUE_CONNECTION=database
ここがsync
になっているとEventとListenerが同期的に処理されます
EventProviderに登録する
App/Providers/EventServiceProvider.php
protected $listen = [
HogeEvent::class => [
FugaListener::class,
],
];
listenerをqueueで処理するように設定
app/Listeners/FugaListener.php
final class FugaListener implements shouldQueue
{
// 省略
}
上記のようにshouldQueue
をimplementsすることでlistenerがqueue処理されるようになります。
Discussion