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