Přejít k obsahu

Queuety

Workflow engine WordPress.

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

Nejnovější vydání v0.22.0 GPL-2.0-or-later WordPress 6.4+, PHP 8.2+

V praxi

Workflow definované v PHP a příkaz pracovního procesu, který je spouští.

Schvalovací workflow

Workflow provede krok, počká 24 hodin a pak se pozastaví na wait_for_approval(), dokud jiný proces neodešle signál approval.

Prodleva se uloží do databáze, takže přežije restart pracovního procesu i nasazení. Signál odeslaný předem se zaznamená a zpracuje, až workflow dosáhne kroku čekání. Zrušením běhu se 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' ] );

Přímé nároky MySQL

Každý pracovní proces běží jako dlouhodobý proces WP-CLI a načítá úlohy přímo z MySQL pomocí FOR UPDATE SKIP LOCKED.

Odolná workflow

Vícekrokové procesy s trvalým stavem, který přežije časové limity PHP, pády i opakování.

Stavové automaty

Dlouhodobý stav řízený událostmi s Queuety::machine(): definujte stavy a přechody, odesílejte události a čtěte časovou osu.

Signály a schvalování

wait_for_signal(), wait_for_approval() a wait_for_input() pozastaví workflow, dokud nedorazí externí vstup.

Úrovně priority

Čtyři úrovně od nízké po naléhavou. Ve frontě se nejdříve načítají úlohy s vyšší prioritou.

Omezování rychlosti

Limity pro jednotlivé obslužné programy v rámci posuvného okna. Pracovní proces, který načte úlohu omezenou limitem rychlosti, ji vrátí do fronty a počká.

Opakující se úlohy

Plánování podle intervalů a cron. Vestavěný parser cron bez externích závislostí.

Paralelní kroky

Spouštějte kroky workflow souběžně a před pokračováním počkejte na dokončení všech.

Metriky a protokolování

Trvalý databázový protokol s propustností, průměrnou dobou trvání, dobou trvání p95 a chybovostí pro každý obslužný program.

Záložní řešení WP-Cron

Bez přístupu k shellu spustí událost WordPress cron jednou za minutu jednorázový pracovní proces pro výchozí frontu.

Middleware

Middleware úloh ve stylu cibule pro limity rychlosti, omezení opakování při výjimkách, jedinečnost, časové limity a ochranu před překrýváním.

PHP 8.2+

Výčtové typy, třídy readonly, výrazy match, povýšení konstruktorových parametrů a atributy PHP.

Proč Queuety

Stav je uložen v MySQL

Řádky fronty, stav workflow, protokoly, signály a streamované části se ukládají do MySQL, takže se při restartu pracovního procesu neztratí žádný stav orchestrace. Na hranici každého kroku se v jedné transakci potvrdí aktualizace stavu, dokončení úlohy i zařazení další úlohy.

Mimo požadavek na stránku

WP-Cron se spouští pouze při návštěvě stránky a 30sekundový časový limit PHP ukončí 60sekundové volání LLM. Pracovní procesy Queuety běží v dlouhodobém procesu WP-CLI a přebírají úlohy bez čekání na návštěvnost.

Ochranné prvky pro běhy agentů

for_each() s režimem kvóra, schvalovacími branami a limity, jako jsou max_transitions() a max_state_bytes(), udržují dlouhé běhy agentů v nastavených mezích.

Použitelné i mimo WordPress

Jádro využívající databázi běží v libovolném procesu PHP, který se může připojit ke stejné databázi, takže jiná aplikace může spouštět úlohy, odesílat signály a číst stav workflow. Spouštěče akcí, propojení WP-Cron a příkazy WP-CLI stále vyžadují WordPress.

Srovnání

Jak Queuety souvisí s plánovači a workflow enginy, které vývojáři WordPress již znají.

Queuety ve srovnání s ostatními nástroji
WP-Cron Vhodné proJe součástí WordPress, takže na sdíleném hostingu nevyžaduje přístup k plánovači systému a úloha, která zmešká svůj čas, se spustí při příštím načtení stránky místo toho, aby se zahodila. Rozdíl oproti QueuetyQueuety pracovníci běží nezávisle na návštěvnosti webu a potřebují dlouho běžící proces wp queuety work. Jeho most WP-Cron převádí opakující se události na naplánované úlohy, zatím ale nespouští jejich callbacky hooků, takže WP-Cron je nadále zajišťuje.
Action Scheduler Vhodné proJe určen k distribuci v pluginech a šablonách bez nutnosti přístupu k serveru. Každý měsíc zpracuje miliony plateb předplatného a webhooků pro WooCommerce a zaznamená každou akci v administračním rozhraní. Rozdíl oproti QueuetyAction Scheduler spustí hook později, podobně jako odložené do_action(). Queuety přidává vícekroková workflow se stavem, který přetrvává mezi kroky, čekáním na signál a schválení i stavovými automaty. Můžete je kontrolovat pomocí příkazů WP-CLI, například wp queuety workflow timeline.
Temporal Vhodné proPlatforma pro odolné vykonávání: Historie událostí zaznamenává každý krok workflow, takže běh po pádu nebo výpadku pokračuje od poslední zaznamenané události. Jako alternativu k vlastnímu hostování služby nabízí Temporal Cloud. Rozdíl oproti QueuetyTemporal Service je server Go s databází, který běží vedle vaší aplikace. Queuety uchovává stav v tabulkách MySQL na databázovém připojení WordPress a pracovní procesy spouští prostřednictvím WP-CLI.

Otázky a odpovědi

Stručné odpovědi z dokumentace Queuety.

Nainstalujte plugin, spusťte pracovní proces a postupujte podle průvodců od první úlohy až po schvalovací postupy a stavové automaty.