Queuety
Motorul de fluxuri de lucru WordPress.
wp plugin install https://github.com/inline0/queuety/releases/latest/download/queuety.zip --activateCea mai recentă versiune 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!',
] );În practică
Un flux de lucru definit în PHP și comanda lucrătorului care îl rulează.
Un flux de lucru cu aprobare
Fluxul de lucru execută un pas, așteaptă 24 de ore, apoi se oprește la wait_for_approval() până când un alt proces trimite semnalul approval.
Întârzierea este stocată în baza de date, astfel că persistă după repornirea lucrătorilor și implementări, iar un semnal trimis prea devreme este înregistrat și preluat când fluxul de lucru ajunge la așteptare. Anularea execuției apelează handlerul 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=6Revendicări directe din MySQL
Fiecare lucrător rulează într-un proces WP-CLI de lungă durată și preia joburi direct din MySQL cu FOR UPDATE SKIP LOCKED.
Fluxuri de lucru durabile
Procese cu mai mulți pași și stare persistentă, care rezistă la expirări PHP, blocări și reîncercări.
Mașini de stări
Stare de lungă durată, bazată pe evenimente, cu Queuety::machine(): definiți stări și tranziții, trimiteți evenimente și consultați cronologia.
Semnale și aprobări
wait_for_signal(), wait_for_approval() și wait_for_input() pun în pauză un flux de lucru până la sosirea unei intrări externe.
Niveluri de prioritate
Patru niveluri, de la Scăzut la Urgent. În cadrul unei cozi, joburile cu prioritate mai mare sunt preluate primele.
Limitarea ratei
Limite per handler într-o fereastră mobilă. Un lucrător care preia un job cu limită de rată îl pune la loc și așteaptă.
Joburi recurente
Programare pe intervale și bazată pe cron. Parser cron integrat, fără dependențe externe.
Pași paraleli
Rulați simultan pașii fluxului de lucru și așteptați finalizarea tuturor înainte de a continua.
Metrici și jurnalizare
Jurnal permanent în baza de date, cu debit, durată medie și p95, precum și rata de erori pentru fiecare handler.
Fallback WP-Cron
Fără acces la shell, un eveniment WordPress cron, declanșat o dată pe minut, pornește un lucrător cu execuție unică pentru coada implicită.
Middleware
Middleware pentru joburi, în stil onion, pentru limite de rată, limitarea excepțiilor, unicitate, expirări și protecție împotriva suprapunerii.
PHP 8.2+
Enum-uri, clase readonly, expresii match, promovarea parametrilor constructorului și atribute PHP.
De ce Queuety
Starea este păstrată în MySQL
Rândurile din coadă, starea fluxului de lucru, jurnalele, semnalele și fragmentele transmise în flux sunt stocate în MySQL, astfel că repornirea unui lucrător nu pierde nicio stare de orchestrare. La limita fiecărui pas, actualizarea stării, finalizarea jobului și adăugarea următorului job în coadă sunt confirmate într-o singură tranzacție.
În afara cererii de pagină
WP-Cron se declanșează doar la vizitele paginilor, iar un apel LLM de 60 de secunde este oprit de o expirare PHP de 30 de secunde. Lucrătorii Queuety rulează într-un proces WP-CLI de lungă durată și preiau lucrul fără să aștepte trafic.
Mecanisme de control pentru execuțiile agenților
for_each() cu un mod de cvorum, porți de aprobare și limite precum max_transitions() și max_state_bytes() mențin execuțiile lungi ale agenților într-un cadru definit.
Utilizabil în afara WordPress
Nucleul bazat pe baza de date rulează în orice proces PHP care poate deschide aceeași bază de date, astfel încât o altă aplicație poate lansa joburi, trimite semnale și citi starea fluxurilor de lucru. Declanșatoarele de acțiuni, puntea WP-Cron și comenzile WP-CLI necesită în continuare WordPress.
Comparativ cu
Cum se raportează Queuety la planificatoarele și motoarele de fluxuri de lucru pe care dezvoltatorii WordPress le cunosc deja.
| Instrument | Potrivit pentru | Diferența față de Queuety |
|---|---|---|
| WP-Cron | Potrivit pentruIntegrat în WordPress, nu necesită acces la planificatorul de sistem pe găzduirea partajată, iar o sarcină care își ratează ora rulează la următoarea încărcare a paginii, în loc să fie eliminată. | Diferența față de QueuetyLucrătorii Queuety rulează independent de traficul site-ului și necesită un proces wp queuety work de lungă durată. Puntea WP-Cron transformă evenimentele recurente în programări, dar încă nu rulează callback-urile hook-urilor, așa că WP-Cron rămâne responsabil de acestea. |
| Action Scheduler | Potrivit pentruCreat pentru distribuire în pluginuri și teme, fără a necesita acces la server; procesează lunar milioane de plăți pentru abonamente și webhook-uri pentru WooCommerce și înregistrează fiecare acțiune într-o interfață de administrare. | Diferența față de QueuetyAction Scheduler rulează un hook la o oră ulterioară, de exemplu un do_action() întârziat. Queuety adaugă fluxuri de lucru cu mai mulți pași, a căror stare persistă între pași, așteptări după semnale și aprobări, precum și mașini de stare; le puteți inspecta prin comenzi WP-CLI precum wp queuety workflow timeline. |
| Temporal | Potrivit pentruO platformă de execuție durabilă: un Istoric al evenimentelor înregistrează fiecare pas al unui flux de lucru, astfel că execuția reia de la ultimul eveniment înregistrat după blocări sau întreruperi, iar Temporal Cloud este oferit ca alternativă la găzduirea propriului serviciu. | Diferența față de QueuetyUn serviciu Temporal este un server Go și o bază de date care rulează alături de aplicația dumneavoastră. Queuety își păstrează starea în tabele MySQL prin conexiunea la baza de date WordPress și rulează lucrătorii prin WP-CLI. |
Întrebări și răspunsuri
Răspunsuri scurte din documentația Queuety.
Nu pentru joburi simple în coada implicită. Pluginul pornește un lucrător cu execuție unică prin WordPress cron în fiecare minut, atât timp cât se declanșează WordPress cron, și procesează câte un job la fiecare execuție. Programările recurente, cozile personalizate și o latență mai mică necesită un proces wp queuety work dedicat.
Nu. Este necesar fie mysqli, fie pdo_mysql și, în mod implicit, se alege mysqli în WordPress. Definiți QUEUETY_DB_DRIVER ca auto, mysqli sau pdo pentru a impune un driver.
Joburile sunt preluate cu SELECT ... FOR UPDATE SKIP LOCKED, acceptat de MySQL începând cu versiunea 8.0 și de MariaDB începând cu 10.6. CI-ul proiectului rulează pe MySQL 8.0.
Da, nucleul bazat pe baza de date: joburile, lucrătorii, fluxurile de lucru, semnalele, mașinile de stare, artefactele, jurnalele, metricile și programările rulează cu o conexiune directă. Grupurile de lucrători necesită și constantele DB_HOST, DB_NAME, DB_USER și DB_PASSWORD. Queuety::on_action(), replace_wp_cron(), inițializarea pluginului și comenzile wp queuety necesită în continuare WordPress.
Încă nu. Queuety::replace_wp_cron() transformă evenimentele recurente wp_schedule_event() în programări Queuety, dar callback-urile hook-urilor nu rulează încă, așa că păstrați WP-Cron pentru evenimentele care trebuie declanșate. Evenimentele din wp_schedule_single_event() rămân gestionate de WP-Cron.
wp queuety work --workers=N pornește un grup fix de procese și repornește procesele secundare care se blochează; sunt necesare extensiile pcntl și posix. --min-workers și --max-workers pornesc un grup adaptiv care crește pe măsură ce se acumulează joburi în așteptare și se reduce când coada se liniștește.
Instalați pluginul, porniți un lucrător și urmați ghidurile, de la primul job până la fluxurile de lucru cu aprobare și mașinile de stare.