Queuety
Arbetsflödesmotorn WordPress.
wp plugin install https://github.com/inline0/queuety/releases/latest/download/queuety.zip --activateSenaste versionen 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!',
] );I praktiken
Ett arbetsflöde definierat i PHP och arbetarens kommando som kör det.
Ett godkännandearbetsflöde
Arbetsflödet kör ett steg, väntar i 24 timmar och pausas sedan vid wait_for_approval() tills en annan process skickar signalen approval.
Fördröjningen lagras i databasen, så den överlever omstarter och driftsättningar av arbetaren. En signal som skickas i förväg registreras och hämtas när arbetsflödet når vänteläget. När körningen avbryts anropas hanteraren 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=6Direkta MySQL-anspråk
Varje arbetare körs i en långlivad WP-CLI-process och hämtar jobb direkt från MySQL med FOR UPDATE SKIP LOCKED.
Beständiga arbetsflöden
Processer med flera steg och beständigt tillstånd som överlever PHP-tidsgränser, krascher och omförsök.
Tillståndsmaskiner
Långlivat, händelsestyrt tillstånd med Queuety::machine(): definiera tillstånd och övergångar, skicka händelser och läs tidslinjen.
Signaler och godkännanden
wait_for_signal(), wait_for_approval() och wait_for_input() pausar ett arbetsflöde tills extern indata kommer.
Prioritetsnivåer
Fyra nivåer från låg till brådskande. Inom en kö hämtas jobb med högre prioritet först.
Hastighetsbegränsning
Begränsningar per hanterare över ett glidande tidsfönster. En arbetare som hämtar ett hastighetsbegränsat jobb lägger tillbaka det och väntar.
Återkommande jobb
Schemaläggning baserad på intervall och cron. Inbyggd cron-parser utan externa beroenden.
Parallella steg
Kör arbetsflödessteg samtidigt och vänta tills alla är klara innan du går vidare.
Mätvärden och loggning
Permanent databaslogg med genomströmning, genomsnittlig varaktighet och p95-varaktighet samt felfrekvens per hanterare.
WP-Cron-reservlösning
Utan skalåtkomst kör en cron-händelse en engångsarbetare för standardkön en gång i minuten WordPress.
Mellanprogramvara
Jobb-mellanprogramvara i onion-stil för hastighetsbegränsningar, strypning av undantag, unikhet, tidsgränser och skydd mot överlappning.
PHP 8.2+
Uppräkningstyper, readonly-klasser, match-uttryck, konstruktörspromovering och PHP-attribut.
Varför Queuety
Tillståndet lagras i MySQL
Körader, arbetsflödestillstånd, loggar, signaler och strömmade delar lagras i MySQL, så en omstart av arbetaren innebär inte att något orkestreringstillstånd går förlorat. Vid varje steggräns sparas tillståndsuppdateringen, jobbets slutförande och nästa köläggning i en och samma transaktion.
Utanför sidförfrågan
WP-Cron körs bara vid sidbesök, och ett LLM-anrop på 60 sekunder avbryts av en tidsgräns på 30 sekunder för PHP. Queuety-arbetare körs i en långlivad WP-CLI-process och hämtar arbete utan att vänta på trafik.
Skyddsräcken för agentkörningar
for_each() med kvorumläge, godkännandesteg och begränsningar som max_transitions() och max_state_bytes() håller långa agentkörningar inom tydliga ramar.
Användbart utanför WordPress
Den databasbaserade kärnan körs i alla PHP-processer som kan ansluta till samma databas, så en annan app kan skicka jobb, skicka signaler och läsa arbetsflödesstatus. Åtgärdsutlösare, bryggan WP-Cron och kommandona WP-CLI kräver fortfarande WordPress.
Jämfört med
Så här förhåller sig Queuety till de schemaläggare och arbetsflödesmotorer som WordPress-utvecklare redan känner till.
| Verktyg | Bra på | Skillnaden jämfört med Queuety |
|---|---|---|
| WP-Cron | Bra påDet är inbyggt i WordPress och kräver därför ingen åtkomst till systemets schemaläggare på delad hosting. En uppgift som missar sin tid körs vid nästa sidladdning i stället för att hoppas över. | Skillnaden jämfört med QueuetyQueuety-arbetare körs oberoende av webbplatstrafiken och behöver en långlivad wp queuety work-process. Bryggan WP-Cron omvandlar återkommande händelser till scheman, men kör ännu inte deras hook-callbacks, så WP-Cron fortsätter att hantera dem. |
| Action Scheduler | Bra påUtformat för distribution i tillägg och teman utan krav på serveråtkomst. Det behandlar miljontals betalningar för prenumerationer och webhooks för WooCommerce varje månad och loggar varje åtgärd i ett administratörsgränssnitt. | Skillnaden jämfört med QueuetyAction Scheduler kör en hook vid ett senare tillfälle, till exempel en fördröjd do_action(). Queuety lägger till arbetsflöden med flera steg och tillstånd som bevaras mellan stegen, väntan på signaler och godkännanden samt tillståndsmaskiner. Du kan granska dem med kommandon som WP-CLI wp queuety workflow timeline. |
| Temporal | Bra påEn plattform för beständig körning: en händelsehistorik registrerar varje steg i ett arbetsflöde, så en körning återupptas från den senast registrerade händelsen efter krascher eller avbrott. Temporal Cloud erbjuds som alternativ till att själv stå för driften av tjänsten. | Skillnaden jämfört med QueuetyEn Temporal-tjänst är en Go-server med en databas som körs bredvid din applikation. Queuety lagrar sitt tillstånd i MySQL-tabeller via databasanslutningen WordPress och kör arbetare genom WP-CLI. |
Frågor och svar
Korta svar från dokumentationen för Queuety.
Inte för enkla jobb i standardkön. Tillägget kör en engångsarbetare via WordPress cron varje minut, så länge WordPress cron körs, och hanterar ett jobb per körning. Återkommande scheman, anpassade köer och lägre fördröjning kräver en dedikerad wp queuety work-process.
Nej. Det kräver antingen mysqli eller pdo_mysql och väljer mysqli som standard under WordPress. Ange QUEUETY_DB_DRIVER som auto, mysqli eller pdo för att tvinga fram en drivrutin.
Jobb hämtas med SELECT ... FOR UPDATE SKIP LOCKED, som MySQL stöder från och med 8.0 och MariaDB från och med 10.6. Projektets CI körs mot MySQL 8.0.
Ja, den databasbaserade kärnan: jobb, arbetare, arbetsflöden, signaler, tillståndsmaskiner, artefakter, loggar, mätvärden och scheman körs mot en direkt Connection. Arbetarpooler kräver också konstanterna DB_HOST, DB_NAME, DB_USER och DB_PASSWORD. Queuety::on_action(), replace_wp_cron(), tilläggets bootstrap och wp queuety-kommandona kräver fortfarande WordPress.
Inte än. Queuety::replace_wp_cron() omvandlar återkommande wp_schedule_event()-händelser till Queuety-scheman, men hook-callbacks körs ännu inte. Behåll därför WP-Cron för händelser som måste köras. Händelser från wp_schedule_single_event() hanteras av WP-Cron.
wp queuety work --workers=N startar en fast pool och startar om barnprocesser som kraschar. Det kräver tilläggen pcntl och posix. --min-workers och --max-workers kör en anpassningsbar pool som växer när kön växer och krymper när kön lugnar sig.
Installera tillägget, starta en arbetare och följ guiderna från ditt första jobb till godkännandearbetsflöden och tillståndsmaskiner.