[Laravel]キューのdelayとsleepオプション
Laravelにてキューを実行させる際に、delayとsleepオプションの関係がちょっと変だったのでメモ。
sleep
1
| |
ジョブがない場合に次のジョブを取得するまでにスリープする秒数の設定。
delay
1
| |
ジョブが失敗した場合に再試行するまでの遅延時間。
delayとsleep
両方設定した場合の動作が少し変な気がするのでそれぞれ試してみた。
| delay | sleep | 失敗時遅延 | 待機 | |
|---|---|---|---|---|
| なし | 30 | 0 | 30 | |
| 30 | なし | 30 | 0 | |
| 5 | 30 | 30 | 30 | |
| 30 | 5 | 30 | 5 |
実行コマンドは以下。
1
| |
結果は、3行目のdelay=5 sleep=30の時だけ意図した動作と違っていた。
本来ならばdelay=5なので失敗時の再試行までの遅延は5秒のはずなのに、sleepに設定している30秒が適用されているようだった。
結論
- delay > sleep の場合は意図通り動作する
- delay < sleep の場合はsleepに設定した時間がdelayにも適用される
これはバグだろうか…。
本体のコードをちょっとだけ追ってみたけどよくわからなかったのでもし誰かわかればお願いします。