Merhabalar, SMS gönderimi üzerine çalışan bir sistemimiz bulunuyor, SMS raporlarını kuyruğa alarak belli aralıklarla STH servisinden alıyoruz. Örneğin 1 SMS gönderildiğinde kuyruğa gecikme ile 2 job ekleniyor 15 dk sonra, 30 dk sonra gibi...
Jobu manuel çalıştırdığımda hiç bir hata ile karşılaşmıyorum, timeout olmadığından eminim fakat bazı joblar failed tablosuna düşüyor, nedenini anlamadım.
PHP max execution time 720 olarak ayarlandı.
Komut ise şu şekilde
php artisan work:queue --tries=3 --timeout=720
Hata çıktısı örneği ise şu şekilde;
Illuminate\Queue\MaxAttemptsExceededException: App\Jobs\RaporJobs has been attempted too many times or run too long. The job may have previously timed out. in /vendor/laravel/framework/src/Illuminate/Queue/Worker.php:601
Aynı failed job için payload şu şekilde;
{"displayName":"App\\Jobs\\RaporJobs","job":"Illuminate\\Queue\\CallQueuedHandler@call","maxTries":null,"delay":null,"timeout":null,"timeoutAt":null,"data":{"commandName":"App\\Jobs\\RaporJobs","command":"O:18:\"App\\Jobs\\RaporJobs\":9:{s:9:\"\u0000*\u0000userId\";i:1674;s:12:\"\u0000*\u0000messageId\";i:2196763;s:6:\"\u0000*\u0000job\";N;s:10:\"connection\";N;s:5:\"queue\";N;s:15:\"chainConnection\";N;s:10:\"chainQueue\";N;s:5:\"delay\";O:25:\"Illuminate\\Support\\Carbon\":3:{s:4:\"date\";s:26:\"2019-10-13 16:56:15.639274\";s:13:\"timezone_type\";i:3;s:8:\"timezone\";s:15:\"Europe\/Istanbul\";}s:7:\"chained\";a:0:{}}"}}
Bu joblarda tries null gözüküyor acaba null olduğu için Illuminate/Queue/Worker.php içerisinde buraya giriyor olabilir mi? Tek tahminim bu.
protected
function markJobAsFailedIfWillExceedMaxAttempts($connectionName, $job, $maxTries, $e)
{
$maxTries = ! is_null($job->maxTries()) ? $job->maxTries() : $maxTries;
if ($job->timeoutAt() && $job->timeoutAt() <= Carbon::now()->getTimestamp()) {
$this->failJob($job, $e);
}
if ($maxTries > 0 && $job->attempts() >= $maxTries) {
$this->failJob($job, $e);
}
}`