Püsivad viivitused
Töövood saavad sammude vahel kindlaks ajaks peatuda, kasutades koostajameetodit delay(). Viivitussammud on püsivad: viivitus salvestatakse andmebaasi, nii et see säilib töötajate taaskäivitamisel, juurutamisel ja serveri taaskäivitamisel.
Meetod ->delay()
Lisa viivitussamm töövoo ahelasse suvalisse kohta:
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 ] );
Töövoog teeb järgmist:
- Käivitab
SendWelcomeEmailHandler - Ootab 1 päeva
- Käivitab
SendFollowUpEmailHandler - Ootab 3 päeva
- Käivitab
SendFinalEmailHandler
Kestuse parameetrid
Meetod delay() võtab vastu suvalise kombinatsiooni nimelisi kestusparameetreid:
| Parameeter | Tüüp | Kirjeldus |
|---|---|---|
$seconds |
int |
Ootamise sekundid |
$minutes |
int |
Ootamise minutid |
$hours |
int |
Ootamise tunnid |
$days |
int |
Ootamise päevad |
Kõik väärtused liidetakse kokku. Need variandid on samaväärsed:
->delay( seconds: 3600 )
->delay( minutes: 60 )
->delay( hours: 1 )
Võid neid kombineerida:
->delay( hours: 1, minutes: 30 ) // 90 minutes total
Kuidas viivitussammud toimivad
Kui töövoog jõuab viivitussammuni, saadab Queuety välja sisemise __queuety_delay töö, mille veerg available_at saab väärtuseks praegune aeg pluss viivituse kestus. Töö jääb andmebaasi ega ole ühelegi töötajale saadaval enne viivituse möödumist.
See tähendab järgmist:
- Ei mingit korduvkontrolli. Töötajad ei kontrolli viivitust korduvalt. Töö muutub lihtsalt õigel ajal saadavaks.
- Ei kasuta mälu. Ootamise ajal ei tööta midagi. Viivitus eksisteerib ainult andmebaasi reana.
- Säilib taaskäivitamisel. Kui töötaja taaskäivitub, on viivitustöö endiselt järjekorras ja selle ajatempel
available_aton õige.
Kui viivitustöö pärast viivituse möödumist kätte võetakse, liigub töövoog automaatselt järgmise sammu juurde.
Näide: viivitusega teavitused
Saada meeldetuletus 1 tund pärast kasutaja registreerumist, kuid ainult juhul, kui ta pole sisseelamisprotsessi lõpetanud:
Queuety::workflow( 'onboarding_reminder' )
->then( CreateAccountHandler::class )
->delay( hours: 1 )
->then( CheckOnboardingHandler::class )
->then( SendReminderHandler::class )
->dispatch( [ 'email' => 'user@example.com' ] );
Samm CheckOnboardingHandler saab olekut kontrollida ja kasutada tingimuslikku hargnemist meeldetuletuse vahelejätmiseks, kui sisseelamisprotsess on juba lõpetatud.
Näide: uuesti proovimine viivitusega
Lisa uuesti proovimise laadsete sammude vahele tahtlikud viivitused:
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' ] );
Mitu viivitust
Töövoog võib sisaldada suvalist arvu viivitussamme. Iga viivitust jälgitakse sõltumatu, järjestikuse nimega (delay_0, delay_1 jne) töövoo olekus.
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 );