coder2
timeout
60 olursa; Bir Job 60 saniyeyi geçtiği anda hala çalışıyor ise başarısız kabul edilip failed_jobs tablosuna atılır.
retry_after
60 olursa; Bir Job 60 saniyeyi geçtiği anda tekrar kuyruğa atılır. timeout ile arasındaki fark ise timeout'un aksine başarısız kabul edilip failed_job tablosuna atılmaz. O yüzden Job'ın birden fazla kez işleme konulması durumu söz konusu oluyor. Yani Job tekrar kuyruğa atıldığında önceki hala devam ettiği için mesela 70. saniyede ilki tamamlanır ardından diğer kuyruğa atılan da tamamlanır, Job iki kez işlem yapmış olur. Buna dikkat etmek lazım.
tries
Başarısız olmuş bir Job'ın kaç kez tekrar deneneceğini belirtiyor. 3 yaparsanız o Job başarısız olursa 3 kere denenecek demektir. 3. sonunda yine başarısız olursa failed_jobs tablosunda kalır.
maxExceptions
timeout dışında bir Job'ın başarısız olması için exception fırlatması lazım, burası çokomelli. Manuel başarısız yapmak istediğinizde handle yöntemi içinde throw new Exception yapabilirsiniz ya da daha güzeli $this->fails($exception = null) yapabilirsiniz. Mantıklı, hatayı anlatan bir exception kullanmak daha iyi olur elbette. İşte bu maxExceptions değeri burada kaç exception sonra görevin başarısız kabul edileceğini belirliyor. Özellikle API istekleri yapan görevlerde işe yarar, bazen sunucuya ilk istekte ulaşamazsınız ya da geçici bir hata hata alırsınız, burada imdadınıza yetişir.
Son olarak:
- retry_after değeri her zaman Job'ın ortalama işlem süresinden uzun olmalı.
- timeout değeri her zaman Job'ın ortalama işlem süresinden uzun olmalı ve ayrıca mutlaka retry_after değerinden az olmalıdır. Yoksa timeout'a düşmeden daha devam ederken tekrar kuyruğa atılır, iki veya daha fazla işlem yapmasına sebep olur. Burası da çokomelli.