Planavimas
Queuety turi integruotą pasikartojančių užduočių palaikymą. Užuot pasikliaujant wp_cron, tvarkaraščiai saugomi duomenų bazėje ir maždaug kartą per minutę vertinami ilgai veikiančiame wp queuety work procese (arba vykdytojų grupės tėviniame procese). wp queuety work --once, wp queuety flush ir įskiepio integruotas WP-Cron atsarginis mechanizmas tvarkaraščių nevertina (#14); jei ilgai veikiančio vykdytojo nėra, paleiskite wp queuety schedule run patys.
Planavimas pagal intervalą
Paprastiems intervalais pagrįstiems tvarkaraščiams naudokite every(). Išraiška gali būti bet kuri eilutė, suderinama su PHP DateTimeImmutable::modify():
use Queuety\Queuety;
Queuety::schedule( 'cleanup_handler' )
->every( '1 hour' )
->on_queue( 'maintenance' );
Queuety::schedule( 'sync_inventory' )
->every( '30 minutes' )
->on_queue( 'sync' );
Queuety::schedule( 'daily_report', [ 'type' => 'summary' ] )
->every( '1 day' );
Planavimas pagal Cron
Standartinėms 5 laukų cron išraiškoms naudokite cron():
// Every day at 3am
Queuety::schedule( 'nightly_cleanup' )
->cron( '0 3 * * *' );
// Every Monday at 9am
Queuety::schedule( 'weekly_digest' )
->cron( '0 9 * * 1' )
->on_queue( 'emails' );
// Every 15 minutes
Queuety::schedule( 'health_check' )
->cron( '*/15 * * * *' );
Tvarkaraščio parinktys
PendingSchedule kūrimo priemonė palaiko šiuos metodus:
| Metodas | Aprašymas |
|---|---|
every( string $interval ) |
Nustatyti intervalo išraišką |
cron( string $expression ) |
Nustatyti cron išraišką |
on_queue( string $queue ) |
Nustatyti tikslinę eilę (numatytoji: 'default') |
overlap( OverlapPolicy $policy ) |
Nustatyti persidengimo politiką (numatytoji: Allow) |
Prieš išsiunčiant užduotį pagal tvarkaraštį, būtina iškviesti arba every(), arba cron(). Jei nenustatytas nė vienas, išmetama RuntimeException.
Persidengimo politika
Jei kitos žymos suveikimo metu suplanuota užduotis vis dar vykdoma (laukiama arba apdorojama), persidengimo politika nustato, kas bus daroma. Nustatykite ją naudodami metodą overlap():
use Queuety\Queuety;
use Queuety\Enums\OverlapPolicy;
Queuety::schedule( 'sync_inventory' )
->every( '5 minutes' )
->overlap( OverlapPolicy::Skip )
->on_queue( 'sync' );
OverlapPolicy sąrašas turi tris parinktis:
| Politika | Reikšmė | Veikimas |
|---|---|---|
OverlapPolicy::Allow |
allow |
Visada išsiunčiama nauja užduotis, net jei ankstesnis vykdymas vis dar aktyvus. Tai numatytoji parinktis. |
OverlapPolicy::Skip |
skip |
Praleidžiama dabartinė žyma, jei apdorojimo komponentas turi laukiančių arba apdorojamų užduočių. next_run atnaujinamas įprastai, todėl tvarkaraščio ritmas išlaikomas. |
OverlapPolicy::Buffer |
buffer |
Kaip ir „Skip“ atveju, žyma neišsiunčiama, o next_run pereina prie kito reguliaraus įvykio. Skirtingai nei „Skip“ atveju, last_run neatnaujinamas. |
Allow (numatytoji parinktis)
Vienu metu gali veikti keli to paties apdorojimo komponento egzemplioriai. Naudokite šią parinktį idempotentiniams apdorojimo komponentams, kurių persidengimas nekenkia.
Queuety::schedule( 'send_heartbeat_ping' )
->every( '1 minute' )
->overlap( OverlapPolicy::Allow );
Skip
Žyma tyliai praleidžiama, jei apdorojimo komponentas vis dar veikia. Naudokite šią parinktį, kai antras egzempliorius būtų nenaudingas arba sukeltų konfliktų.
Queuety::schedule( 'rebuild_search_index' )
->every( '10 minutes' )
->overlap( OverlapPolicy::Skip );
Buffer
Šiuo metu veikia taip pat kaip „Skip“: jei apdorojimo komponentas turi laukiančią arba apdorojamą užduotį, žyma neišsiunčiama, o next_run pereina prie kito reguliaraus įvykio. Skiriasi tik tuo, kad „Buffer“ palieka last_run nepakeistą, o „Skip“ įrašo praleistą žymą kaip paskutinį vykdymą.
Queuety::schedule( 'sync_inventory' )
->every( '5 minutes' )
->overlap( OverlapPolicy::Buffer );
Kaip tai veikia
Sukūrus tvarkaraštį, Queuety išsaugo jį lentelėje queuety_schedules kartu su išraiška, apdorojimo komponentu, duomenimis ir kitu apskaičiuotu vykdymo laiku.
Per kiekvieną planuoklio žymą (maždaug kartą per minutę ilgai veikiančiame vykdytojuje arba paleidus wp queuety schedule run) planuoklis patikrina, kurių tvarkaraščių next_run laikas jau atėjo. Kiekvienam suėjusiam tvarkaraščiui išsiunčiama nauja užduotis, o next_run atnaujinamas iki kito įvykio.
Tvarkaraščių valdymas per CLI
# List all schedules
wp queuety schedule list
# Add a recurring schedule
wp queuety schedule add cleanup_handler --every="1 hour"
wp queuety schedule add nightly_report --cron="0 3 * * *" --queue=reports
# Remove a schedule
wp queuety schedule remove cleanup_handler
# Manually trigger the scheduler
wp queuety schedule run
Tvarkaraščių valdymas per PHP
// Get the scheduler instance
$scheduler = Queuety::scheduler();
// List all schedules
$schedules = $scheduler->list();
// Remove a schedule by handler name
$scheduler->remove( 'cleanup_handler' );
// Manually trigger a tick
$count = $scheduler->tick();
Duomenys
Tvarkaraščiuose gali būti statinių duomenų, kurie perduodami kiekvienai išsiųstai užduočiai:
Queuety::schedule( 'generate_report', [ 'type' => 'daily', 'format' => 'pdf' ] )
->every( '1 day' )
->on_queue( 'reports' );
Kaskart suveikus tvarkaraščiui, išsiunčiama nauja užduotis su šiais duomenimis.