Ütemezés
A Queuety beépített támogatást nyújt az ismétlődő feladatokhoz. A wp_cron használata helyett az ütemezéseket az adatbázisban tárolja, és egy hosszú ideig futó wp queuety work folyamat (vagy egy workerpool szülőfolyamata) percenként nagyjából egyszer kiértékeli őket. A wp queuety work --once, a wp queuety flush és a bővítmény beépített WP-Cron tartalékmegoldása nem értékeli ki az ütemezéseket (#14); hosszú ideig futó worker nélkül futtassa saját maga a wp queuety schedule run parancsot.
Időköz alapú ütemezés
Egyszerű, időköz alapú ütemezéshez használja a every() értéket. A kifejezés bármely, a PHP DateTimeImmutable::modify() értékével kompatibilis karakterlánc lehet:
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 alapú ütemezés
A szabványos, 5 mezős cron kifejezésekhez használja a cron() értéket:
// 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 * * * *' );
Ütemezési beállítások
A PendingSchedule builder a következő metódusokat támogatja:
| Metódus | Leírás |
|---|---|
every( string $interval ) |
Időközkifejezés beállítása |
cron( string $expression ) |
cron kifejezés beállítása |
on_queue( string $queue ) |
Célvárólista beállítása (alapértelmezett: 'default') |
overlap( OverlapPolicy $policy ) |
Átfedési szabály beállítása (alapértelmezett: Allow) |
Az ütemezés indítása előtt meg kell hívnia a every() vagy a cron() metódust. Ha egyiket sem állítja be, RuntimeException kivétel keletkezik.
Átfedési szabályok
Ha az ütemezett feladat még fut (függőben van vagy feldolgozás alatt áll), amikor elérkezik a következő ütemezési időpont, az átfedési szabály határozza meg, mi történik. Beállításához használja a overlap() metódust:
use Queuety\Queuety;
use Queuety\Enums\OverlapPolicy;
Queuety::schedule( 'sync_inventory' )
->every( '5 minutes' )
->overlap( OverlapPolicy::Skip )
->on_queue( 'sync' );
A OverlapPolicy felsorolásnak három esete van:
| Szabály | Érték | Működés |
|---|---|---|
OverlapPolicy::Allow |
allow |
Mindig új feladatot indít, még akkor is, ha az előző futás aktív. Ez az alapértelmezés. |
OverlapPolicy::Skip |
skip |
Kihagyja az aktuális időpontot, ha a kezelőnek van függőben lévő vagy feldolgozás alatt álló feladata. A next_run szokásosan frissül, így az ütemezés tartja az ütemet. |
OverlapPolicy::Buffer |
buffer |
A Skip szabályhoz hasonlóan nem indítja el a feladatot, a next_run pedig a következő szabályos időpontra lép. A Skip szabálytól eltérően a last_run nem frissül. |
Engedélyezés (alapértelmezett)
Ugyanazon kezelő több példánya párhuzamosan is futhat. Idempotens kezelőknél használja, amelyeknél az átfedés nem okoz gondot.
Queuety::schedule( 'send_heartbeat_ping' )
->every( '1 minute' )
->overlap( OverlapPolicy::Allow );
Kihagyás
Ha a kezelő még fut, az ütemezési időpont csendben kimarad. Olyan kezelőknél használja, amelyek második példányának futtatása pazarló lenne vagy ütközést okozna.
Queuety::schedule( 'rebuild_search_index' )
->every( '10 minutes' )
->overlap( OverlapPolicy::Skip );
Pufferelés
Jelenleg a Kihagyás szabályhoz hasonlóan működik: ha a kezelőnek van függőben lévő vagy feldolgozás alatt álló feladata, az időpont nem indít új feladatot, a next_run pedig a következő szabályos időpontra lép. A különbség az, hogy a Pufferelés változatlanul hagyja a last_run értékét, míg a Kihagyás az utolsó futásként rögzíti a kihagyott időpontot.
Queuety::schedule( 'sync_inventory' )
->every( '5 minutes' )
->overlap( OverlapPolicy::Buffer );
Működés
Ütemezés létrehozásakor a Queuety az queuety_schedules táblában tárolja a kifejezéssel, kezelővel, adattal és a következő kiszámított futási időponttal együtt.
Minden ütemezői lépésnél (nagyjából percenként egy hosszú ideig futó workerben, vagy a wp queuety schedule run futtatásakor) az ütemező ellenőrzi, mely ütemezések next_run időpontja múlt el. Minden esedékes ütemezéshez új feladatot indít, és frissíti a next_run értékét a következő időpontra.
Ütemezések kezelése a CLI segítségével
# 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
Ütemezések kezelése a PHP segítségével
// 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();
Adat
Az ütemezések statikus adatot is tartalmazhatnak, amely minden elindított feladatnak átadódik:
Queuety::schedule( 'generate_report', [ 'type' => 'daily', 'format' => 'pdf' ] )
->every( '1 day' )
->on_queue( 'reports' );
Az ütemezés minden aktiválásakor új feladat indul ezzel az adattal.