Pāriet uz saturu

Plānošana

Queuety ir iebūvēts atbalsts periodiskiem uzdevumiem. Tā vietā, lai paļautos uz wp_cron, grafiki tiek glabāti datubāzē un aptuveni reizi minūtē tos izvērtē ilgstoši darbojošs wp queuety work process (vai darbinieku kopuma vecākprocess). wp queuety work --once, wp queuety flush un spraudņa iebūvētā WP-Cron rezerves iespēja grafikus neizvērtē (#14); ja ilgstoši darbojoša darbinieka nav, palaidiet wp queuety schedule run paši.

Plānošana pēc intervāla

Izmantojiet every() vienkāršiem grafikiem, kuru pamatā ir intervāli. Izteiksme var būt jebkura virkne, kas ir saderīga ar 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' );

Cron plānošana

Izmantojiet cron() standarta 5 lauku cron izteiksmēm:

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 * * * *' );

Grafika opcijas

PendingSchedule veidotājs atbalsta šīs metodes:

Metode Apraksts
every( string $interval ) Iestatīt intervāla izteiksmi
cron( string $expression ) Iestatīt cron izteiksmi
on_queue( string $queue ) Iestatīt mērķa rindu (noklusējums: 'default')
overlap( OverlapPolicy $policy ) Iestatīt pārklāšanās politiku (noklusējums: Allow)

Pirms grafiks sāk uzdevuma izpildi, jāizsauc vai nu every(), vai cron(). Ja nav iestatīta neviena no tām, tiek izmests RuntimeException.

Pārklāšanās politikas

Ja nākamā atzīme pienāk brīdī, kad ieplānotais uzdevums vēl darbojas (gaida vai tiek apstrādāts), pārklāšanās politika nosaka, kas notiks. Iestatiet to ar metodi overlap():

PHP
use Queuety\Queuety;
use Queuety\Enums\OverlapPolicy;

Queuety::schedule( 'sync_inventory' )
    ->every( '5 minutes' )
    ->overlap( OverlapPolicy::Skip )
    ->on_queue( 'sync' );

OverlapPolicy uzskaitījumā ir trīs varianti:

Politika Vērtība Darbība
OverlapPolicy::Allow allow Vienmēr palaist jaunu uzdevumu, pat ja iepriekšējā izpilde vēl turpinās. Šī ir noklusējuma politika.
OverlapPolicy::Skip skip Izlaist pašreizējo atzīmi, ja apdarinātājam ir gaidoši vai apstrādes stadijā esoši uzdevumi. next_run tiek atjaunināts kā parasti, lai grafiks saglabātu ritmu.
OverlapPolicy::Buffer buffer Tāpat kā Skip gadījumā, atzīme netiek palaista un next_run pāriet uz nākamo regulāro izpildes reizi. Atšķirībā no Skip, last_run netiek atjaunināts.

Allow (noklusējums)

Vienlaikus var darboties vairākas viena apdarinātāja instances. Izmantojiet šo iespēju idempotentiem apdarinātājiem, kuriem pārklāšanās nav kaitīga.

PHP
Queuety::schedule( 'send_heartbeat_ping' )
    ->every( '1 minute' )
    ->overlap( OverlapPolicy::Allow );

Skip

Ja apdarinātājs joprojām darbojas, atzīme tiek klusi izlaista. Izmantojiet šo iespēju apdarinātājiem, kuriem otras instances palaišana būtu nelietderīga vai radītu konfliktus.

PHP
Queuety::schedule( 'rebuild_search_index' )
    ->every( '10 minutes' )
    ->overlap( OverlapPolicy::Skip );

Buffer

Pašlaik darbojas tāpat kā Skip: ja apdarinātājam vēl ir gaidošs vai apstrādes stadijā esošs uzdevums, atzīme netiek palaista un next_run pāriet uz nākamo regulāro izpildes reizi. Vienīgā atšķirība: Buffer atstāj last_run nemainītu, bet Skip reģistrē izlaisto atzīmi kā pēdējo izpildi.

PHP
Queuety::schedule( 'sync_inventory' )
    ->every( '5 minutes' )
    ->overlap( OverlapPolicy::Buffer );

Kā tas darbojas

Kad grafiks tiek izveidots, Queuety to saglabā tabulā queuety_schedules kopā ar izteiksmi, apdarinātāju, datiem un nākamo aprēķināto izpildes laiku.

Katrā plānotāja atzīmē (aptuveni reizi minūtē ilgstoši darbojošā darbiniekā vai palaižot wp queuety schedule run) plānotājs pārbauda grafikus, kuru next_run laiks ir pienācis. Katram pienākušajam grafikam tas palaiž jaunu uzdevumu un atjaunina next_run uz nākamo izpildes reizi.

Grafiku pārvaldība, izmantojot CLI

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

Grafiku pārvaldība, izmantojot 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();

Dati

Grafikos var iekļaut statiskus datus, kas tiek nodoti katram palaistajam uzdevumam:

PHP
Queuety::schedule( 'generate_report', [ 'type' => 'daily', 'format' => 'pdf' ] )
    ->every( '1 day' )
    ->on_queue( 'reports' );

Ikreiz, kad grafiks tiek izpildīts, tiek palaists jauns uzdevums ar šiem datiem.