Queuety
Workflow engine WordPress.
wp plugin install https://github.com/inline0/queuety/releases/latest/download/queuety.zip --activateNejnovější vydání 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
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().
$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=6Pří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í.
| Nástroj | Vhodné pro | Rozdíl oproti Queuety |
|---|---|---|
| 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.
Pro jednoduché úlohy ve výchozí frontě ne. Plugin spouští jednorázového pracovníka přes WordPress cron každou minutu, pokud se spouští WordPress cron, a při každém spuštění zpracuje jednu úlohu. Opakované naplánované úlohy, vlastní fronty a nižší latence vyžadují vyhrazený proces wp queuety work.
Ne. Vyžaduje buď mysqli, nebo pdo_mysql a ve výchozím nastavení používá pod WordPress mysqli. Chcete-li vynutit konkrétní ovladač, nastavte QUEUETY_DB_DRIVER na auto, mysqli nebo pdo.
Úlohy se načítají pomocí SELECT ... FOR UPDATE SKIP LOCKED, který MySQL podporuje od verze 8.0 a MariaDB od verze 10.6. CI projektu běží na MySQL 8.0.
Ano, jádro využívající databázi: úlohy, pracovní procesy, workflow, signály, stavové automaty, artefakty, protokoly, metriky a plány fungují s přímým připojením Connection. Skupiny pracovních procesů potřebují také konstanty DB_HOST, DB_NAME, DB_USER a DB_PASSWORD. Queuety::on_action(), replace_wp_cron(), zavedení pluginu a příkazy wp queuety stále vyžadují WordPress.
Zatím ne. Queuety::replace_wp_cron() převádí opakované události wp_schedule_event() na plány Queuety, ale jejich hooky zatím nespouští, takže události, které se musí spustit, ponechte v WP-Cron. Události z wp_schedule_single_event() zůstávají v WP-Cron.
wp queuety work --workers=N spustí pevný fond procesů a restartuje podřízené procesy, které spadnou; vyžaduje rozšíření pcntl a posix. --min-workers a --max-workers spustí adaptivní fond, který se zvětšuje podle rostoucí fronty a zmenšuje, když se fronta zklidní.
Nainstalujte plugin, spusťte pracovní proces a postupujte podle průvodců od první úlohy až po schvalovací postupy a stavové automaty.