Ga naar de inhoud

Queuety

De WordPress-workflowengine.

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

Nieuwste release v0.22.0 GPL-2.0-or-later WordPress 6.4+, PHP 8.2+

In de praktijk

Een workflow gedefinieerd in PHP en de workeropdracht die deze uitvoert.

Een goedkeuringsworkflow

De workflow voert een stap uit, wacht 24 uur en pauzeert vervolgens bij wait_for_approval() totdat een ander proces het signaal approval verstuurt.

De vertraging wordt in de database opgeslagen, dus blijft behouden na herstarts van workers en implementaties. Een signaal dat vroeg wordt verstuurd, wordt geregistreerd en opgepikt zodra de workflow het wachtpunt bereikt. Als de uitvoering wordt geannuleerd, wordt de handler on_cancel() aangeroepen.

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

Directe MySQL-claims

Elke worker draait in een langlopend WP-CLI-proces en claimt taken rechtstreeks uit MySQL met FOR UPDATE SKIP LOCKED.

Duurzame workflows

Processen met meerdere stappen en blijvende status die PHP-time-outs, crashes en nieuwe pogingen overleven.

Toestandsmachines

Langlopende, gebeurtenisgestuurde status met Queuety::machine(): definieer statussen en overgangen, verstuur gebeurtenissen en bekijk de tijdlijn.

Signalen en goedkeuringen

wait_for_signal(), wait_for_approval() en wait_for_input() pauzeren een workflow totdat externe invoer binnenkomt.

Prioriteitsniveaus

Vier niveaus van Laag tot Urgent. Binnen een wachtrij worden taken met een hogere prioriteit het eerst geclaimd.

Snelheidslimieten

Limieten per handler binnen een voortschrijdend tijdvenster. Een worker die een taak met een snelheidslimiet claimt, zet deze terug en wacht.

Terugkerende taken

Planning op basis van intervallen en cron. Ingebouwde cron-parser zonder externe afhankelijkheden.

Parallelle stappen

Voer workflowstappen gelijktijdig uit en wacht totdat ze allemaal zijn voltooid voordat je verdergaat.

Statistieken en logboeken

Een permanent databaselogboek met doorvoer, gemiddelde duur en p95-duur, en het foutenpercentage per handler.

WP-Cron-fallback

Zonder shelltoegang voert een WordPress-gebeurtenis cron die eenmaal per minuut plaatsvindt een eenmalige worker uit voor de standaardwachtrij.

Middleware

Jobmiddleware in onionstijl voor snelheidslimieten, afremmen bij uitzonderingen, uniciteit, time-outs en bescherming tegen overlap.

PHP 8.2+

Enums, readonly-klassen, match-expressies, constructorpromotie en attributen PHP.

Waarom Queuety

Status leeft in MySQL

Rijregels, workflowstatus, logboeken, signalen en gestreamde chunks worden opgeslagen in MySQL, zodat een workerherstart geen orkestratiestatus verloren laat gaan. Elke stapgrens legt de statusupdate, de taakvoltooiing en de volgende wachtrijplaatsing vast in één transactie.

Buiten het paginaverzoek

WP-Cron wordt alleen geactiveerd bij paginabezoeken, en een LLM-aanroep van 60 seconden wordt afgebroken door een PHP-time-out van 30 seconden. Queuety-workers draaien in een langlopend WP-CLI-proces en pakken werk op zonder op verkeer te wachten.

Waarborgen voor agentuitvoeringen

for_each() met een quorummodus, goedkeuringspoorten en limieten zoals max_transitions() en max_state_bytes() houden langlopende agentuitvoeringen binnen duidelijk vastgestelde grenzen.

Ook bruikbaar buiten WordPress

De op de database gebaseerde kern werkt in elk PHP-proces dat dezelfde database kan openen, zodat een andere app taken kan starten, signalen kan versturen en de workflowstatus kan uitlezen. Actietriggers, de WP-Cron-bridge en de WP-CLI-opdrachten hebben nog steeds WordPress nodig.

Vergeleken met

Hoe Queuety zich verhoudt tot de planners en workflowengines die WordPress-ontwikkelaars al kennen.

Queuety vergeleken met andere tools
WP-Cron Goed inIngebouwd in WordPress; op gedeelde hosting is geen toegang tot de systeemplanner nodig. Een taak die de geplande tijd mist, wordt bij het volgende paginabezoek uitgevoerd in plaats van overgeslagen. Verschil met QueuetyQueuety-workers draaien onafhankelijk van siteverkeer en vereisen een langlopend wp queuety work-proces. De WP-Cron-bridge zet terugkerende gebeurtenissen om in planningen, maar voert de bijbehorende hook-callbacks nog niet uit. WP-Cron blijft daarvoor dus verantwoordelijk.
Action Scheduler Goed inGemaakt voor distributie in plugins en thema's zonder dat servertoegang nodig is. Het verwerkt elke maand miljoenen betalingen voor Subscriptions en webhooks voor WooCommerce, en registreert elke actie in een beheerinterface. Verschil met QueuetyAction Scheduler voert een hook op een later tijdstip uit, zoals een uitgestelde do_action(). Queuety voegt workflows met meerdere stappen toe waarvan de status tussen stappen behouden blijft, wachtpunten voor signalen en goedkeuringen, en statusmachines. Je kunt ze inspecteren met WP-CLI-opdrachten zoals wp queuety workflow timeline.
Temporal Goed inEen platform voor duurzame uitvoering: een Event History registreert elke stap van een workflow, zodat een uitvoering na crashes of storingen wordt hervat vanaf de laatst vastgelegde gebeurtenis. Temporal Cloud is beschikbaar als alternatief voor het zelf hosten van de service. Verschil met QueuetyEen Temporal Service is een Go-server met een database die naast je applicatie draait. Queuety bewaart de status in MySQL-tabellen op de WordPress-databaseverbinding en voert workers uit via WP-CLI.

Vragen en antwoorden

Korte antwoorden uit de documentatie van Queuety.

Installeer de plugin, start een worker en volg de handleidingen vanaf je eerste taak tot aan goedkeuringsworkflows en statusmachines.