Queuety
WordPress darbo eigos variklis.
wp plugin install https://github.com/inline0/queuety/releases/latest/download/queuety.zip --activateNaujausia versija 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!',
] );Praktinis pritaikymas
Darbo eiga, apibrėžta PHP, ir ją vykdanti darbinio proceso komanda.
Patvirtinimo darbo eiga
Darbo eiga atlieka žingsnį, laukia 24 valandas, tada pristabdoma ties wait_for_approval(), kol kitas procesas atsiunčia signalą approval.
Delsa saugoma duomenų bazėje, todėl išlieka iš naujo paleidus darbinius procesus ir įdiegus naują versiją. Per anksti išsiųstas signalas įrašomas ir apdorojamas darbo eigai pasiekus laukimo būseną. Atšaukus vykdymą, iškviečiamas apdorojimo įrankis 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=6Tiesioginės MySQL užklausos
Kiekvienas darbinis procesas veikia ilgai veikiančiame WP-CLI procese ir tiesiogiai pasiima užduotis iš MySQL, naudodamas FOR UPDATE SKIP LOCKED.
Patikimos darbo eigos
Kelių žingsnių procesai su išsaugoma būsena, kuri išlieka po PHP skirtųjų laikų pabaigos, gedimų ir pakartotinių bandymų.
Būsenų automatai
Ilgai veikianti, įvykiais grindžiama būsena su Queuety::machine(): apibrėžkite būsenas ir perėjimus, siųskite įvykius, peržiūrėkite laiko juostą.
Signalai ir patvirtinimai
wait_for_signal(), wait_for_approval() ir wait_for_input() pristabdo darbo eigą, kol gaunama išorinė įvestis.
Prioriteto lygiai
Keturi lygiai nuo žemo iki skubaus. Eilėje pirmiausia paimamos aukštesnio prioriteto užduotys.
Spartos ribojimas
Kiekvieno apdorojimo įrankio apribojimai slenkančiame laikotarpyje. Darbinis procesas, paėmęs ribojamą užduotį, grąžina ją į eilę ir laukia.
Pasikartojančios užduotys
Planavimas pagal intervalus ir cron. Įtaisytasis cron analizatorius be išorinių priklausomybių.
Lygiagretūs veiksmai
Vykdykite darbo eigos žingsnius vienu metu ir prieš tęsdami palaukite, kol visi bus užbaigti.
Metrikos ir žurnalai
Nuolatinis duomenų bazės žurnalas, kuriame pateikiamas kiekvieno apdorojimo įrankio našumas, vidutinė ir p95 trukmė bei klaidų dažnis.
WP-Cron atsarginis veikimas
Neturint prieigos prie apvalkalo, kartą per minutę vykstantis WordPress cron įvykis paleidžia vienkartinį numatytosios eilės darbinį procesą.
Tarpinė programinė įranga
Sluoksniuota užduočių tarpinė programinė įranga, skirta dažnio apribojimams, išimčių ribojimui, unikalumui, skirties laikams ir persidengimo prevencijai.
PHP 8.2+
Enum tipai, tik skaitymui skirtos klasės, match išraiškos, konstruktoriaus savybių deklaravimas ir PHP atributai.
Kodėl Queuety
Būsena saugoma MySQL
Užduočių eilės įrašai, darbo eigos būsena, žurnalai, signalai ir srautiniu būdu perduodamos dalys saugomos MySQL, todėl iš naujo paleidus darbinį procesą neprarandama jokia orkestravimo būsena. Kiekvieno žingsnio riboje vienoje operacijoje įrašomas būsenos naujinimas, užduoties užbaigimas ir kitos užduoties įtraukimas į eilę.
Už puslapio užklausos ribų
WP-Cron suveikia tik aplankius puslapį, o 60 sekundžių trunkantį LLM iškvietimą nutraukia 30 sekundžių PHP skirtasis laikas. Queuety darbiniai procesai veikia ilgai WP-CLI procese ir apdoroja užduotis nelaukdami lankytojų srauto.
Apsaugos priemonės agentų vykdymui
for_each() su kvorumo režimu, patvirtinimo ribomis ir tokiais apribojimais kaip max_transitions() bei max_state_bytes() neleidžia ilgai trunkantiems agentų vykdymams peržengti nustatytų ribų.
Galima naudoti ir už WordPress ribų
Duomenų baze grindžiamas pagrindas veikia bet kuriame PHP procese, galinčiame prisijungti prie tos pačios duomenų bazės, todėl kita programa gali paleisti užduotis, siųsti signalus ir peržiūrėti darbo eigos būseną. Veiksmų paleidikliams, WP-Cron sąsajai ir WP-CLI komandoms vis dar reikia WordPress.
Palyginimas su
Kaip Queuety siejasi su planuokliais ir darbo eigos varikliais, kuriuos WordPress kūrėjai jau žino.
| Įrankis | Stipriosios pusės | Skirtumas nuo Queuety |
|---|---|---|
| WP-Cron | Stipriosios pusėsĮtraukta į WordPress, todėl bendrojo prieglobos aplinkoje nereikia prieigos prie sistemos planuoklio. Jei užduoties laikas praleidžiamas, ji vykdoma kitą kartą įkėlus puslapį, o ne atmetama. | Skirtumas nuo QueuetyQueuety darbiniai procesai veikia nepriklausomai nuo svetainės srauto, jiems reikia ilgai veikiančio wp queuety work proceso. WP-Cron sąsaja pasikartojančius įvykius paverčia tvarkaraščiais, tačiau jų kablių iškvietimų dar nevykdo, todėl juos ir toliau tvarko WP-Cron. |
| Action Scheduler | Stipriosios pusėsSukurta platinti papildiniuose ir temose, nereikalaujant prieigos prie serverio. Kas mėnesį apdoroja milijonus mokėjimų, skirtų prenumeratoms, ir WooCommerce žiniatinklio kablius bei registruoja kiekvieną veiksmą administravimo sąsajoje. | Skirtumas nuo QueuetyAction Scheduler vėliau iškviečia kablį, pavyzdžiui, uždelstą do_action(). Queuety siūlo kelių žingsnių darbo eigas, kurių būsena išsaugoma tarp žingsnių, laukimą signalų ir patvirtinimų bei būsenų automatus. Juos galima tikrinti naudojant WP-CLI komandas, pavyzdžiui, wp queuety workflow timeline. |
| Temporal | Stipriosios pusėsPatikima vykdymo platforma: įvykių istorijoje įrašomas kiekvienas darbo eigos žingsnis, todėl po gedimų ar veiklos sutrikimų vykdymas tęsiamas nuo paskutinio užregistruoto įvykio. Temporal Cloud galima rinktis kaip alternatyvą paslaugos prieglobai savo serveryje. | Skirtumas nuo QueuetyTemporal Service yra Go serveris ir duomenų bazė, veikiantys greta jūsų programos. Queuety saugo būseną WordPress duomenų bazės ryšio MySQL lentelėse ir darbinius procesus vykdo per WP-CLI. |
Klausimai ir atsakymai
Trumpi atsakymai iš Queuety dokumentacijos.
Paprastoms užduotims numatytojoje eilėje – ne. Papildinys kas minutę paleidžia vienkartinį darbinį procesą per WordPress cron, jei veikia WordPress cron, ir kiekvieno paleidimo metu apdoroja vieną užduotį. Pasikartojantiems tvarkaraščiams, pasirinktinėms eilėms ir mažesnei delsai reikia atskiro wp queuety work proceso.
Ne. Jam reikia arba mysqli, arba pdo_mysql; pagal numatytuosius nustatymus WordPress naudojamas mysqli. Apibrėžkite QUEUETY_DB_DRIVER kaip auto, mysqli arba pdo, kad nurodytumėte tvarkyklę.
Užduotys paimamos naudojant SELECT ... FOR UPDATE SKIP LOCKED, kurį MySQL palaiko nuo 8.0, o MariaDB – nuo 10.6 versijos. Projekto CI vykdoma su MySQL 8.0.
Taip. Duomenų baze grindžiamas pagrindas – užduotys, darbiniai procesai, darbo eigos, signalai, būsenų automatai, artefaktai, žurnalai, metrikos ir tvarkaraščiai – veikia tiesioginiu ryšiu. Darbinių procesų telkiniams taip pat reikia konstantų DB_HOST, DB_NAME, DB_USER ir DB_PASSWORD. Queuety::on_action(), replace_wp_cron(), papildinio inicijavimui ir wp queuety komandoms vis dar reikia WordPress.
Kol kas ne. Queuety::replace_wp_cron() pasikartojančius wp_schedule_event() įvykius paverčia Queuety tvarkaraščiais, tačiau jų kablių iškvietimai dar nevykdomi, todėl įvykiams, kurie privalo suveikti, ir toliau naudokite WP-Cron. Įvykiai iš wp_schedule_single_event() ir toliau apdorojami su WP-Cron.
wp queuety work --workers=N sukuria fiksuoto dydžio procesų telkinį ir paleidžia iš naujo užstrigusius antrinius procesus; tam reikalingi pcntl ir posix plėtiniai. --min-workers ir --max-workers paleidžia prisitaikantį telkinį, kuris didėja didėjant darbų eilei ir mažėja jai aprimus.
Įdiekite papildinį, paleiskite darbinį procesą ir vadovaukitės vadovais – nuo pirmosios užduoties iki patvirtinimo darbo eigų ir būsenų automatų.