浜松のWEBシステム開発・スマートフォンアプリ開発・RTK-GNSS関連の開発はお任せください
株式会社シーポイントラボ
TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:静岡県浜松市中区富塚町1933-1 佐鳴湖パークタウンサウス2F

【Laravel Queue 】delay()がうまく働かないときに確認したいこと

Laravelには標準で、”queue”という仕組みが存在します。

リクエストされた順に処理を実行したり。「呼び出しから~分後に実行する」というような、ちょっとステートフルな処理を簡単に行うことができるようになります。

今回、後者の”「呼び出しから~分後に実行する」”処理を実装しました。

Laravel Queueを利用して非同期によるメール送信 – 思考の葉

こちらのサイトを参考に下記のように記述しました。

hogeController.php

class hogeController extends Controller
{
    //省略
    public function piyo($hogeId): JsonResponse
    {
        $Hoge = Hoge::findOrFail($hogeId);
    hogeJob::dispatch($Hoge)->delay(now()->addMinutes(Config::get('app.huga', 10)));
    }
    //省略
}

上記のソースは、hogeJobクラス内に記述された処理を10分遅延させる例ですが、これを実行した際、なぜか処理が遅延されることなく、すぐに送信されてしまう状況でした。

手順どおりにやっていたので、なぜおかしいのかわからず、最初少し焦りましたが、すぐに原因がわかりました。

Laravelの環境別設定ファイルである.envに次のデフォルトで次のような記述があります。

QUEUE_CONNECTION=sync

queueを使用する場合、この部分をqueueの保存先に合わせて変更する必要があるのですが、今回の場合、syncのままになっていたのが原因で、delay()が効かなくなっていました。

今回の環境では、queueの保存先にDBを使用するつもりだったので、

QUEUE_CONNECTION=database

としたところ、無事delay()が動作するようになりました。

queueが想定通り動かなくて困った際は、こういった設定周りももう一度確認してみることが、早い解決につながるかもしれませんね。

  • この記事いいね! (0)