Laravel 4.1 で Iron IO のプッシュ キューを使用して、実行に長時間 (4 ~ 5 分) かかるジョブをキューに入れています。私の問題は、ジョブの実行が完了する前に Iron IO がジョブを再試行することです (つまり、ジョブの実行に時間がかかりすぎて、Iron IO が失敗したと判断して再試行する)。
試みられた解決策:
Iron IO には、いつジョブを再試行する必要があるかについて、プッシュ キューに関する設定があります。再試行を 1 回 (許可される最小値) に設定し、再試行の待機時間は 500 秒 (ジョブが完了するのに十分な時間です) に設定しています。ただし、Iron は、現在の設定である 500 秒を無視して、わずか 60 秒 (デフォルトの再試行時間) 後にジョブを再試行し続けます。
ワーカーで $job->delete() と $job->attempts() を使用して、ジョブが完了したことを Iron に通知しようとしましたが、どちらも機能しませんでした。私のワーカーコードは以下です。
class Worker { public function fire($job, $data) { if( $job->attempts() > 1 ) { $job->delete(); } else { // perform job that takes 4-5 minutes } } }
以前は単純に
class Worker { public function fire($job, $data) { $job->delete(); // perform job that takes 4-5 minutes } }
しかし、それもうまくいきませんでした。
基本的に、Iron IO がジョブを再試行する前に 10 分間待機することを望んでいますが、それが失敗しても再試行されない場合は満足です。