📝

Laravelのリスナを非同期で動かす

2023/11/17に公開

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処理されるようになります。

GitHubで編集を提案

Discussion