Pereiti prie turinio

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():

PHP
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():

PHP
// 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():

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

PHP
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ų.

PHP
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ą.

PHP
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

Shell
# 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

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:

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