Queuety
Workflow engine pre WordPress.
wp plugin install https://github.com/inline0/queuety/releases/latest/download/queuety.zip --activateNajnovšie vydanie v0.22.0 GPL-2.0-or-later WordPress 6.4+, PHP 8.2+
use Queuety\Queuety;
Queuety::register( 'send_email', SendEmailHandler::class );
Queuety::dispatch( 'send_email', [
'to' => 'user@example.com',
'subject' => 'Welcome',
'body' => 'Hello from Queuety!',
] );V praxi
Pracovný postup definovaný v PHP a príkaz workera, ktorý ho spúšťa.
Pracovný postup schvaľovania
Pracovný postup vykoná krok, počká 24 hodín a potom sa pozastaví na wait_for_approval(), kým iný proces neodošle signál approval.
Oneskorenie sa uloží do databázy, takže pretrvá reštartovanie workerov aj nasadenia. Signál odoslaný skôr sa zaznamená a spracuje, keď pracovný postup dosiahne bod čakania. Zrušením spustenia sa zavolá obslužný program on_cancel().
$workflow_id = Queuety::workflow( 'approval_flow' )
->then( SubmitRequestHandler::class )
->delay( hours: 24 )
->wait_for_approval()
->then( ProcessApprovalHandler::class )
->on_cancel( CleanupHandler::class )
->dispatch( [ 'request_id' => 99 ] );
// Later, from another process:
Queuety::signal( $workflow_id, 'approval', [ 'approved_by' => 'admin@example.com' ] );# Single worker on default queue
wp queuety work
# Process a specific queue
wp queuety work --queue=emails
# Process multiple queues in priority order
wp queuety work --queue=critical,default,low
# One-shot mode
wp queuety work --once
# Multi-worker mode
wp queuety work --workers=4
# Adaptive worker pool
wp queuety work --queue=providers --min-workers=2 --max-workers=6Priame nárokovanie MySQL
Každý worker beží ako dlhodobo spustený proces WP-CLI a preberá úlohy priamo z MySQL pomocou príkazu FOR UPDATE SKIP LOCKED.
Trvácne pracovné postupy
Viackrokové procesy s trvalým stavom, ktorý pretrvá timeouty PHP, pády aj opakované pokusy.
Stavové automaty
Dlhodobo zachovávaný stav riadený udalosťami pomocou Queuety::machine(): definujte stavy a prechody, posielajte udalosti a čítajte časovú os.
Signály a schvaľovanie
wait_for_signal(), wait_for_approval() a wait_for_input() pozastavia pracovný postup, kým nepríde externý vstup.
Úrovne priority
Štyri úrovne od nízkej po naliehavú. V rámci frontu sa najskôr preberajú úlohy s vyššou prioritou.
Obmedzovanie frekvencie
Limity pre jednotlivé obslužné programy v pohyblivom časovom okne. Worker, ktorý prevezme úlohu s obmedzenou frekvenciou, ju vráti do frontu a počká.
Opakujúce sa úlohy
Plánovanie podľa intervalu a cron. Vstavaný parser cron bez externých závislostí.
Paralelné kroky
Spúšťajte kroky pracovného postupu súbežne a pred pokračovaním počkajte na dokončenie všetkých.
Metriky a zaznamenávanie
Trvalý databázový denník s priepustnosťou, priemernou a p95 dobou trvania a mierou chýb pre každý obslužný program.
Náhradné riešenie WP-Cron
Bez prístupu k shellu spustí udalosť WordPress cron raz za minútu jednorazového workera pre predvolený front.
Medzivrstva
Middleware úloh v štýle onion zabezpečuje obmedzovanie frekvencie, reguláciu výnimiek, jedinečnosť, časové limity a ochranu pred súbehom.
PHP 8.2+
Vymenované typy, triedy iba na čítanie, výrazy match, propagácia konštruktorových parametrov a atribúty PHP.
Prečo Queuety
Stav je uložený v MySQL
Riadky frontu, stav pracovného postupu, denníky, signály a streamované časti sa ukladajú v MySQL, takže reštart workerov nespôsobí stratu stavu orchestrácie. Hranica každého kroku potvrdí aktualizáciu stavu, dokončenie úlohy aj zaradenie ďalšej úlohy v jednej transakcii.
Mimo požiadavky na stránku
WP-Cron sa spúšťa iba pri návštevách stránky a 60-sekundové volanie LLM ukončí 30-sekundový timeout PHP. Workeri Queuety bežia ako dlhodobo spustený proces WP-CLI a preberajú prácu bez čakania na návštevnosť.
Ochranné mantinely pre beh agentov
for_each() s režimom kvóra, schvaľovacími bránami a limitmi, ako sú max_transitions() a max_state_bytes(), udržia dlhé behy agentov v stanovených medziach.
Použiteľné aj mimo WordPress
Jadro založené na databáze beží v ľubovoľnom procese PHP, ktorý sa dokáže pripojiť k rovnakej databáze, takže iná aplikácia môže spúšťať úlohy, posielať signály a čítať stav pracovného postupu. Spúšťače akcií, mostík WP-Cron a príkazy WP-CLI stále vyžadujú WordPress.
V porovnaní s
Ako Queuety súvisí s plánovačmi a workflow enginmi, ktoré už vývojári WordPress poznajú.
| Nástroj | V čom vyniká | Rozdiel oproti Queuety |
|---|---|---|
| WP-Cron | V čom vynikáJe súčasťou WordPress, takže na zdieľanom hostingu nepotrebuje prístup k systémovému plánovaču. Ak sa úloha v plánovanom čase nespustí, vykoná sa pri ďalšom načítaní stránky namiesto toho, aby sa zahodila. | Rozdiel oproti QueuetyQueuety pracovníci bežia nezávisle od návštevnosti webu a potrebujú dlhodobo spustený proces wp queuety work. Jeho most WP-Cron mení opakujúce sa udalosti na plány, ale zatiaľ nespúšťa ich spätné volania hookov, takže za ne naďalej zodpovedá WP-Cron. |
| Action Scheduler | V čom vynikáJe určený na distribúciu v pluginoch a témach bez potreby prístupu k serveru. Každý mesiac spracuje milióny platieb za predplatné a webhookov pre WooCommerce a každú akciu zaznamená v administračnom rozhraní. | Rozdiel oproti QueuetyAction Scheduler spustí hook neskôr, napríklad ako odložený do_action(). Queuety pridáva viackrokové pracovné postupy so stavom, ktorý pretrváva medzi krokmi, čakaním na signály a schválenie aj stavovými automatmi. Môžete ich kontrolovať pomocou príkazov WP-CLI, napríklad wp queuety workflow timeline. |
| Temporal | V čom vynikáPlatforma na trvácne vykonávanie: história udalostí zaznamenáva každý krok pracovného postupu, takže po pádoch alebo výpadkoch pokračuje od poslednej zaznamenanej udalosti. Temporal Cloud je dostupný ako alternatíva k vlastnému hostovaniu služby. | Rozdiel oproti QueuetySlužba Temporal je server v Go spolu s databázou, ktorý beží vedľa vašej aplikácie. Queuety ukladá svoj stav do tabuliek MySQL v databázovom pripojení WordPress a spúšťa workery cez WP-CLI. |
Otázky a odpovede
Stručné odpovede z dokumentácie Queuety.
Na jednoduché úlohy v predvolenom fronte nie. Plugin spúšťa jednorazového workera cez WordPress cron každú minútu, pokiaľ sa spúšťa WordPress cron, a pri každom spustení spracuje jednu úlohu. Opakované plány, vlastné fronty a nižšia latencia vyžadujú vyhradený proces wp queuety work.
Nie. Potrebuje buď mysqli, alebo pdo_mysql a v prostredí WordPress predvolene vyberie mysqli. Ak chcete vynútiť konkrétny ovládač, nastavte QUEUETY_DB_DRIVER na auto, mysqli alebo pdo.
Úlohy sa preberajú pomocou SELECT ... FOR UPDATE SKIP LOCKED, ktorý podporuje MySQL od verzie 8.0 a MariaDB od verzie 10.6. CI projektu sa spúšťa voči verzii MySQL 8.0.
Áno. Jadro založené na databáze: úlohy, workeri, pracovné postupy, signály, stavové automaty, artefakty, denníky, metriky a plány fungujú cez priame pripojenie. Pooly workerov potrebujú aj konštanty DB_HOST, DB_NAME, DB_USER a DB_PASSWORD. Queuety::on_action(), replace_wp_cron(), inicializácia pluginu a príkazy wp queuety stále vyžadujú WordPress.
Zatiaľ nie. Queuety::replace_wp_cron() mení opakujúce sa udalosti wp_schedule_event() na plány Queuety, ale ich hook callbacky zatiaľ nespúšťa, preto naďalej používajte WP-Cron pre udalosti, ktoré sa musia spustiť. Udalosti z wp_schedule_single_event() zostávajú v správe WP-Cron.
Príkaz wp queuety work --workers=N vytvorí pevný pool procesov a reštartuje detské procesy, ktoré spadnú; vyžaduje rozšírenia pcntl a posix. Príkazy --min-workers a --max-workers spúšťajú adaptívny pool, ktorý sa rozširuje pri hromadení úloh a zmenšuje, keď sa front upokojí.
Nainštalujte plugin, spustite workera a postupujte podľa príručiek od prvej úlohy až po pracovné postupy schvaľovania a stavové automaty.