Laravel'de, yüksek yük nedeniyle harici bir API arızası nedeniyle zaman zaman başarısız olan kuyruğa alınmış bir işim var. Sorun şu ki, seçeneklerim, Laravel Kuyruğu API isteklerini başarılı olana kadar ya da isteklerin X sayısından sonra durmasını söyleyene kadar çekmeye devam etmesiydi.Laravel'de başarısız Kuyruklu İş girişimleri arasında nasıl gecikmeler olabilir?
İşin nasıl başarısız olduğuna bağlı olarak, 5 dakika içinde tekrar çekiçlemeye devam etmek yerine tekrar denemesi gerektiğini söylemenin bir yolu var mı?
Yerleşik sıra işleyicisini kullanmak istiyorum, ancak yeniden deneme işlevselliği, gerçek yaşam senaryolarının işlenmesi için oluşturulduğu görünmüyor. Bir işte başarısız olmanın birçok sebebinin derhal tekrar denenerek çözülemeyeceğini düşünürdüm. Eğer istisnalar dışında bunu yapmak zorunda olmadığını unutmayın
// app/Jobs/ExampleJob.php
namespace App\Jobs;
class ExampleJob extends Job
{
use \Illuminate\Queue\InteractsWithQueue;
public function handle()
{
try {
// Do stuff that might fail
} catch(AnException $e) {
// Example where you might want to retry
if ($this->attempts() < 3) {
$delayInSeconds = 5 * 60;
$this->release($delayInSeconds);
}
} catch(AnotherException $e) {
// Example where you don't want to retry
$this->delete();
}
}
}
, ayrıca sadece eylemlerden sonucunu kontrol ve oradan karar verebilir: Ne yapabilirsiniz
Teşekkürler. İşi bırakmanın yanlış anlaşıldığını gördüm. Ayrıca, delete() işlevini nerede buldunuz? Bu belgelenmiş gibi görünmüyor. İşi, başarısız iş tablolarına yerleştirerek kaldırmanın desteklenen bir yolu olduğunu umuyorum. – Citizen
Kaynağında buldum: https://github.com/laravel/framework/blob/5.1/src/Illuminate/Queue/InteractsWithQueue.php –
Hatalı işler tablosuna bunları ekleme hakkında. Bunun nasıl çalıştığından tam olarak emin değilim, ama istisnayı atmanız gerekebileceğine inanıyorum, bu yüzden aynı zamanda kuyruk işçisi tarafından ele alınacaktır. –