Kalıcı Gecikmeler
İş akışları, delay() oluşturucu yöntemini kullanarak adımlar arasında belirli bir süre duraklatılabilir. Gecikme adımları kalıcıdır: gecikme veritabanında saklanır, bu nedenle çalışan yeniden başlatmalarından, dağıtımlardan ve sunucu yeniden başlatmalarından etkilenmez.
->delay() yöntemi
İş akışı zincirinin herhangi bir yerine bir gecikme adımı ekleyin:
use Queuety\Queuety;
Queuety::workflow( 'drip_campaign' )
->then( SendWelcomeEmailHandler::class )
->delay( days: 1 )
->then( SendFollowUpEmailHandler::class )
->delay( days: 3 )
->then( SendFinalEmailHandler::class )
->dispatch( [ 'user_id' => 42 ] );
İş akışı şunları yapar:
SendWelcomeEmailHandlerçalıştırılır- 1 gün beklenir
SendFollowUpEmailHandlerçalıştırılır- 3 gün beklenir
SendFinalEmailHandlerçalıştırılır
Süre parametreleri
delay() yöntemi, adlandırılmış süre parametrelerinin herhangi bir bileşimini kabul eder:
| Parametre | Tür | Açıklama |
|---|---|---|
$seconds |
int |
Beklenecek saniye |
$minutes |
int |
Beklenecek dakika |
$hours |
int |
Beklenecek saat |
$days |
int |
Beklenecek gün |
Tüm değerler toplanır. Bunlar eşdeğerdir:
->delay( seconds: 3600 )
->delay( minutes: 60 )
->delay( hours: 1 )
Bunları birleştirebilirsiniz:
->delay( hours: 1, minutes: 30 ) // 90 minutes total
Gecikme adımları nasıl çalışır
Bir iş akışı gecikme adımına ulaştığında Queuety, available_at sütunu geçerli zaman ile gecikme süresinin toplamına ayarlanmış bir dahili __queuety_delay işi dağıtır. İş veritabanında bekler ve gecikme süresi dolana kadar hiçbir çalışan tarafından alınmaz.
Bunun anlamı şudur:
- Yoklama yapılmaz. Çalışanlar gecikmeyi tekrar tekrar denetlemez. İş, zamanı geldiğinde kullanılabilir hâle gelir.
- Bellek kullanımı yoktur. Bekleme sırasında çalışan hiçbir şey yoktur. Gecikme yalnızca veritabanı satırı olarak bulunur.
- Yeniden başlatmalara dayanıklıdır. Çalışan yeniden başlatılırsa gecikme işi, doğru
available_atzaman damgasıyla kuyrukta kalır.
Gecikme işinin süresi dolduktan sonra alınmasıyla iş akışı otomatik olarak bir sonraki adıma ilerler.
Örnek: gecikmeli bildirimler
Kullanıcı kaydolduktan 1 saat sonra, ancak başlangıç sürecini tamamlamadıysa bir hatırlatma gönderin:
Queuety::workflow( 'onboarding_reminder' )
->then( CreateAccountHandler::class )
->delay( hours: 1 )
->then( CheckOnboardingHandler::class )
->then( SendReminderHandler::class )
->dispatch( [ 'email' => 'user@example.com' ] );
CheckOnboardingHandler adımı durumu inceleyebilir ve başlangıç süreci zaten tamamlandıysa hatırlatmayı atlamak için koşullu dallanma kullanabilir.
Örnek: artan bekleme süreli yeniden deneme
Yeniden denemeye benzer adımlar arasına kasıtlı gecikmeler ekleyin:
Queuety::workflow( 'poll_external_api' )
->then( CheckStatusHandler::class, 'check' )
->delay( minutes: 5 )
->then( CheckStatusHandler::class, 'recheck' )
->delay( minutes: 15 )
->then( CheckStatusHandler::class, 'final_check' )
->then( ProcessResultHandler::class )
->dispatch( [ 'external_id' => 'abc-123' ] );
Birden çok gecikme
Bir iş akışı istediği sayıda gecikme adımı içerebilir. Her gecikme bağımsızdır ve iş akışı durumunda sıralı bir adla (delay_0, delay_1 vb.) izlenir.
Queuety::workflow( 'multi_step_drip' )
->then( StepA::class )
->delay( hours: 2 )
->then( StepB::class )
->delay( days: 1 )
->then( StepC::class )
->delay( minutes: 30 )
->then( StepD::class )
->dispatch( $payload );