[Laravel]キューのdelayとsleepオプション

Laravelにてキューを実行させる際に、delayとsleepオプションの関係がちょっと変だったのでメモ。

sleep

1
--sleep[=SLEEP]      Number of seconds to sleep when no job is available [default: "3"]

ジョブがない場合に次のジョブを取得するまでにスリープする秒数の設定。

delay

1
--delay[=DELAY]      The number of seconds to delay failed jobs [default: "0"]

ジョブが失敗した場合に再試行するまでの遅延時間。

delayとsleep

両方設定した場合の動作が少し変な気がするのでそれぞれ試してみた。

delay sleep 失敗時遅延 待機
なし 30 0 30
30 なし 30 0
5 30 30 30
30 5 30 5

実行コマンドは以下。

1
$ php artisan queue:listen --sleep=xx --delay=xx

結果は、3行目のdelay=5 sleep=30の時だけ意図した動作と違っていた。
本来ならばdelay=5なので失敗時の再試行までの遅延は5秒のはずなのに、sleepに設定している30秒が適用されているようだった。

結論

  • delay > sleep の場合は意図通り動作する
  • delay < sleep の場合はsleepに設定した時間がdelayにも適用される

これはバグだろうか…。
本体のコードをちょっとだけ追ってみたけどよくわからなかったのでもし誰かわかればお願いします。

laravel/framework

   このエントリーをはてなブックマークに追加