Queuety
De WordPress-workflowengine.
wp plugin install https://github.com/inline0/queuety/releases/latest/download/queuety.zip --activateNieuwste release 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!',
] );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.
$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=6Directe 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.
| Tool | Goed in | Verschil met Queuety |
|---|---|---|
| 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.
Niet voor eenvoudige taken in de standaardwachtrij. De plugin voert elke minuut via WordPress cron een eenmalige worker uit, zolang WordPress cron wordt geactiveerd. Deze verwerkt één taak per uitvoering. Voor terugkerende planningen, aangepaste wachtrijen en een kortere vertraging is een apart wp queuety work-proces nodig.
Nee. Het vereist mysqli of pdo_mysql en kiest onder WordPress standaard mysqli. Stel QUEUETY_DB_DRIVER in op auto, mysqli of pdo om een driver af te dwingen.
Taken worden geclaimd met SELECT ... FOR UPDATE SKIP LOCKED. MySQL ondersteunt dit vanaf versie 8.0 en MariaDB vanaf versie 10.6. De CI van het project wordt uitgevoerd op MySQL 8.0.
Ja. De op de database gebaseerde kern — taken, workers, workflows, signalen, statusmachines, artefacten, logboeken, statistieken en planningen — werkt met een directe Connection. Workerpools hebben ook de constanten DB_HOST, DB_NAME, DB_USER en DB_PASSWORD nodig. Queuety::on_action(), replace_wp_cron(), de plugin-bootstrap en de wp queuety-opdrachten vereisen nog steeds WordPress.
Nog niet. Queuety::replace_wp_cron() zet terugkerende wp_schedule_event()-gebeurtenissen om in Queuety-planningen, maar de bijbehorende hook-callbacks worden nog niet uitgevoerd. Blijf daarom WP-Cron gebruiken voor gebeurtenissen die moeten worden geactiveerd. Gebeurtenissen van wp_schedule_single_event() blijven bij WP-Cron.
wp queuety work --workers=N start een vaste pool en herstart kinderen die crashen; hiervoor zijn de extensies pcntl en posix nodig. Met --min-workers en --max-workers wordt een aanpasbare pool uitgevoerd die groeit als de achterstand oploopt en krimpt wanneer het rustiger wordt.
Installeer de plugin, start een worker en volg de handleidingen vanaf je eerste taak tot aan goedkeuringsworkflows en statusmachines.