Bevezetés
A Queuety egy WordPress bővítmény, amely gyors feladatsort, tartós munkafolyamat-motort és tartós állapotgép-futtatókörnyezetet biztosít. A workerek közvetlenül a MySQL rendszerből veszik át a feladatokat, és egy hosszú ideig futó WP-CLI folyamatban dolgozzák fel őket. A PHP futtatókörnyezetnek, amely betölti a WordPress és WP-CLI elemet, vagy a mysqli, vagy a pdo_mysql elemre van szüksége.
Miért a Queuety?
A WordPress nem rendelkezik valódi háttérfeladat-rendszerrel. A wp_cron csak oldalmegtekintéskor fut le. Az Action Scheduler alapértelmezett futtatója a WP-Cron rendszerre és a loopback HTTP kérésekre támaszkodik; ezek legfeljebb 30 másodpercig dolgoznak fel kötegeket. Egy 60 másodpercig tartó LLM API hívást a PHP 30 másodperces időkorlátja megszakít. Nincs mód olyan többlépéses folyamatok futtatására, amelyek összeomlás esetén is megmaradnak, és ott folytatódnak, ahol abbamaradtak.
A Queuety három alapelemmel oldja meg ezt:
- Feladatok a háttérben, aszinkron végrehajtandó munkához
- Munkafolyamatok tartós állapotú, többlépéses folyamatokhoz
- Állapotgépek a hosszú életű, eseményvezérelt életciklus-állapotokhoz
Gyors példa
Feladat indítása a modern API használatával:
use Queuety\Contracts\Job;
use Queuety\Dispatchable;
readonly class SendEmailJob implements Job {
use Dispatchable;
public function __construct(
public string $to,
public string $subject,
public string $body,
) {}
public function handle(): void {
wp_mail( $this->to, $this->subject, $this->body );
}
}
SendEmailJob::dispatch( 'user@example.com', 'Welcome', 'Hello from Queuety!' );
Vagy a klasszikus, kezelőnév-alapú megközelítést is használhatja:
use Queuety\Queuety;
Queuety::dispatch( 'send_email', [ 'to' => 'user@example.com' ] );
Tartós munkafolyamat futtatása:
Queuety::workflow( 'generate_report' )
->then( FetchDataHandler::class )
->then( CallLLMHandler::class )
->then( FormatOutputHandler::class )
->dispatch( [ 'user_id' => 42 ] );
Hosszú életű munkamenet modellezése állapotgéppel:
use Queuety\Enums\StateMachineStatus;
Queuety::machine( 'agent_session' )
->state( 'awaiting_user' )
->on( 'user_message', 'planning' )
->state( 'planning' )
->action( PlanSessionAction::class )
->on( 'planned', 'completed' )
->state( 'completed', StateMachineStatus::Completed )
->dispatch( [ 'thread_id' => 42 ] );
Worker indítása:
wp queuety work
Ha ügynökalapú rendszert épít, kezdje az Ügynökvezénylés oldallal. Bemutatja, hogyan kapcsolódnak össze a tervező/végrehajtó folyamatok, az emberi felülvizsgálati ellenőrzőpontok és a munkafolyamatok közötti várakozások.
Ha a rendszer eseményvezérelt és hosszú életű, a munkafolyamatok mellett kezdje az Állapotgépek oldallal.
Ha teljes körű integrációs példákat keres, lásd a Példák oldalt, amely most a Neuron alapú mintákat is tartalmazza a szolgáltatóváltáshoz, a streameléshez, a memóriával támogatott felülvizsgálati ismétlésekhez és a függő munkafolyamatokhoz.
Ha azt szeretné, hogy a munkafolyamatok WordPress tartományi eseményekből, például a save_post eseményből induljanak, lásd a Műveletindítók oldalt.
Ha az adatbázis-alapú futtatókörnyezetet a WordPress rendszeren kívül szeretné használni, lásd az Önálló használat oldalt.
Fő megkülönböztető jellemzők
- Gyors végrehajtás. A workerek közvetlenül férnek hozzá a MySQL sorhoz, és elkerülik a kérésenkénti cron mintát, amely lelassítja a háttérfeladatokat a WordPress környezetben.
- Tartós munkafolyamatok. Többlépéses folyamatok megőrzött állapottal, amelyek túlélik a PHP időtúllépéseit, összeomlásait és újrapróbálkozásait. Minden lépéshatár atomi MySQL tranzakció.
- Kifejezett állapotgépek. Csevegési munkameneteket, jóváhagyásokat és más hosszú élettartamú életciklusokat modellezhet névvel ellátott állapotokkal, feltételhez kötött átmenetekkel, sorba állított állapotbelépési műveletekkel és tartós esemény-idővonalakkal.
- Modern dispatch API. Önálló jobosztályok a
Dispatchabletraittel, payloadként szolgáló, típusos konstruktor-tulajdonságokkal, valamint az osztályon deklarált$tries/$timeout/$backoffelemekkel. Egyreadonlyosztály nem adhat alapértéket ezeknek a tulajdonságoknak, ezért deklarálja őket readonly, promoted konstruktor-tulajdonságokkal rendelkező hagyományos osztályban. - Middleware-folyamat. Hagymahéj-szerű middleware sebességkorlátozáshoz, kivétel-fojtáshoz, egyedi jobokhoz és egyéni logikához. Jobonként, egy
middleware()metódussal deklarálható. - Folyamatos lépések. A
StreamingStepinterfész olyan adatdarabokat ad vissza, amelyek azonnal mentésre kerülnek az adatbázisba. Újrapróbálkozáskor a korábban mentett darabok is rendelkezésre állnak, így a folyam ott folytatható, ahol abbamaradt. Ideális LLM-válaszokhoz és nagy letöltésekhez. - Bővíthető gyorsítótárréteg. A
CacheFactoryautomatikusan felismeri az APCu-t, ennek hiányában memóriabeli gyorsítótárra vált. Egyéni háttértárak aContracts\Cachemegvalósításával készíthetők. Belsőleg sebességkorlátozó-lekérdezésekhez és a sor állapotához használatos. - Kötegelt feldolgozás és láncolás. Jobcsoportokat indíthat a
then/catch/finallyvisszahívásokkal és folyamatkövetéssel, vagy egymás után láncolhatja a jobokat, amelyek mindegyike az előző befejezésétől függ. - Tartós késleltetések és várakozások. A
delay()folyamat-újraindítást túlélő késleltetéseket ad hozzá. Await_for_signal(),wait_for_signals(),wait_for_approval(),wait_for_input()éswait_for_workflow()lehetővé teszi, hogy a munkafolyamatok külső eseményekre vagy más munkafolyamatokra várjanak anélkül, hogy életben kellene tartaniuk a PHP-t. - Dinamikus for-each. A
for_each()a munkafolyamat állapota alapján bontja ki a futás közben felfedezett ágfeladatokat, és támogatja az összes sikeres, az első sikeres, valamint a kvórumos befejezési módot. - Aszinkron munkafolyamat-átadások. A
start_workflows()a futás közben felfedezett elemekből önálló, legfelső szintű munkafolyamatokat hoz létre, amelyekre később várni lehet. - WordPress műveleti triggerek. A
on_action()a core- vagy pluginműveleti hookokat tartós munkafolyamat-indításokhoz rendeli, feltételekkel és idempotenciával. - Tartós artefaktumok. A megnevezett munkafolyamat-kimeneteket a fő állapotcsomagon kívül tárolhatja, és továbbviheti őket az állapot, a CLI vizsgálat, az exportálás és az újrajátszás során.
- Munkafolyamat-védőkorlátok. A
version(), a determinisztikus definícióhash, az idempotens indítási kulcsok és a munkafolyamat-keretek megkönnyítik az ügynökszerű futások vizsgálatát, valamint megakadályozzák a duplikálást és az észrevétlenül elhúzódó futást. - Erőforrás-kezelés. A párhuzamossági csoportok, a költségegységek, a munkafolyamat-keretek és a workerfelvétel segítenek meghatározott keretek között tartani a költséges, ügynökszerű munkát.
- Lépés-visszavonás. A
compensate_with()és acompensate_on_failure()visszaállítási hookokat biztosít a befejezett lépésekhez, ha a munkafolyamatokat megszakítják vagy hibát észlelnek. - Életjelek. A hosszan futó lépések életjeleket küldenek, hogy az elavult jobok helyreállítási rendszere ne vegye át az aktív munkát.
- Munkafolyamat-követés. Minden lépésátmenet rögzítésre kerül a bemenettel, kimenettel, a korábbi és az új állapottal, a kontextussal, az artefaktumokkal, az adatdarabokkal, a hibákkal, valamint a
workflow_state_at()segítségével végzett időutazásos hibakereséssel együtt. - Párhuzamos lépések. A lépések egyidejűleg futnak, és a továbblépés előtt mindegyik befejezését megvárják.
- Feltételes elágazás. A korábbi állapot alapján névvel ellátott lépésekre ugorhat a
_next_stephasználatával. - Munkafolyamatok futtatása. Gyermek-munkafolyamatokat indíthat, amelyek visszajuttatják az eredményeiket a szülőhöz.
- Prioritási sorok. Négy szint (Low, Normal, High, Urgent) típusbiztos PHP enumokon keresztül.
- Többsoros workerek. Egyetlen workerben több sort dolgozhat fel szigorú prioritási sorrendben.
- Sebességkorlátozás. Kezelőnkénti végrehajtási korlátok gördülő időablakkal.
- Ismétlődő jobok. Intervallumalapú és cron alapú ütemezés konfigurálható átfedési szabályokkal (Allow, Skip, Buffer).
- Munkafolyamat megszakítása. Futó munkafolyamatokat szakíthat meg, és elindíthatja a regisztrált takarító kezelőket.
- Állapottisztítás. Automatikusan eltávolítja a régi lépéskimeneteket, hogy kezelhető maradjon a nagy munkafolyamat-állapot.
- Worker-párhuzamosság. A
--workers=Ntöbb folyamatot indít, és összeomlás esetén automatikusan újraindítja őket. - Teljes megfigyelhetőség. Adatbázis-naplózás, kezelőnkénti metrikák és esemény-webhookok.
- Tesztelési segédeszközök. A
QueueFakerögzíti az elindított jobokat és kötegeket az egységtesztekben végzett ellenőrzésekhez. - PHP attribútumok. A
#[QueuetyHandler('name')]használatával nincs szükség konfigurációra a kezelők regisztrálásához.
Működés
A workerek egy hosszan futó WP-CLI folyamaton belül futnak, és közvetlenül a MySQL-ből veszik fel a jobokat. A sorok, a munkafolyamat-állapot, a naplók, a kötegek, a jelek és a folyamatos adatdarabok mind a MySQL-ben élnek, így a worker újraindítása nem veszíti el a vezénylési állapotot.
A munkafolyamatok lépésekre bontják a hosszan futó feladatokat. Minden lépés elmenti a kimenetét egy megosztott, adatbázisbeli állapotcsomagba. Ha a PHP egy lépés közben leáll, a worker az összes korábbi állapot megőrzésével újrapróbálja az adott lépést. A lépéshatár egyetlen MySQL tranzakció: az állapot frissítése, a job befejezése és a következő lépés sorba állítása mind atomikusan történik.
Workflow: generate_report (3 steps)
Step 0: fetch_data -> state: {user_data: {...}}
Step 1: call_llm -> PHP dies -> retry -> state: {user_data: {...}, llm_response: "..."}
Step 2: format_output -> state: {user_data: {...}, llm_response: "...", report_url: "/reports/42.pdf"}
Workflow: completed
Követelmények
- PHP 8.2 vagy újabb
- WordPress 6.4 vagy újabb
- MySQL 8.0+ vagy MariaDB 10.6+, mivel a workerek
SELECT ... FOR UPDATE SKIP LOCKEDhasználatával veszik fel a jobokat mysqlivagypdo_mysqla PHP futtatókörnyezetben, amely betölti a WordPress-t és a WP-CLI-t- WP-CLI dedikált workerek futtatásához
wp queuety workhasználatával - A
pcntlésposixPHP bővítmények a workerpoolokhoz (--workers,--min-workers,--max-workers)
Telepítési útmutatóért tekintse meg az Első lépések részt.