📝
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