2016-02-07 17 views
6

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

cevap

9

böyle bir şeydir.

+0

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

+1

Kaynağında buldum: https://github.com/laravel/framework/blob/5.1/src/Illuminate/Queue/InteractsWithQueue.php –

+3

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. –

0

el işi tekrar kullanılabilir olana kadar saniye miktarını belirleyecek Illuminate \ Kuyruk \ InteractsWithQueue yöntemini

$this->release(10); 

argümanı kullanarak işi serbest bırakmak olabilir.

numaralı bölümü gözden geçirin. Sürüm 5.1 için official documentation numaralı Bayi'de İşleri Serbest Bırakma'u el ile açın.

İlgili konular