Preskočiť na obsah

Queuety

Workflow engine pre WordPress.

Terminál
wp plugin install https://github.com/inline0/queuety/releases/latest/download/queuety.zip --activate

Najnovšie vydanie v0.22.0 GPL-2.0-or-later WordPress 6.4+, PHP 8.2+

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

PHP
$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' ] );

Priame 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ú.

Queuety v porovnaní s inými nástrojmi
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.

Nainštalujte plugin, spustite workera a postupujte podľa príručiek od prvej úlohy až po pracovné postupy schvaľovania a stavové automaty.