Queuety
WordPress töövoomootor.
wp plugin install https://github.com/inline0/queuety/releases/latest/download/queuety.zip --activateViimane väljalase 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!',
] );Praktikas
Töövoog, mis on määratletud asukohas PHP, ja seda käivitav töötaja käsk.
Kinnitamise töövoog
Töövoog käivitab sammu, ootab 24 tundi ja peatub seejärel punktis wait_for_approval(), kuni mõni teine protsess saadab signaali approval.
Viivitus salvestatakse andmebaasi, nii et see säilib töötajate taaskäivituste ja juurutuste vahel. Enneaegu saadetud signaal salvestatakse ning võetakse arvesse, kui töövoog jõuab ootamiseni. Käivituse tühistamisel kutsutakse välja töötleja 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=6MySQL-i otsenõudmised
Iga töötaja töötab kaua kestvas WP-CLI protsessis ja võtab töid otse kohast MySQL käsuga FOR UPDATE SKIP LOCKED.
Püsivad töövood
Mitmeastmelised püsiva olekuga protsessid, mis peavad vastu PHP ajalõppudele, krahhidele ja korduskatsetele.
Olekumasinad
Pikaealine sündmustepõhine olek koos Queuety::machine()-ga: määrake olekud ja üleminekud, saatke sündmusi ning vaadake ajajoont.
Signaalid ja kinnitused
wait_for_signal(), wait_for_approval() ja wait_for_input() peatavad töövoo välise sisendi saabumiseni.
Prioriteeditasemed
Neli taset: madalast kiireloomuliseni. Järjekorras võetakse esmalt ette suurema prioriteediga tööd.
Päringupiirang
Töötleja piirangud liikuva ajavahemiku kohta. Kiiruspiiranguga töö võtnud töötaja paneb selle tagasi ja ootab.
Korduvad tööd
Ajavälpade ja cron põhine ajastamine. Sisseehitatud cron-parser ilma väliste sõltuvusteta.
Paralleelsammud
Käivitage töövoo sammud samaaegselt ja oodake enne jätkamist nende kõigi lõpetamist.
Mõõdikud ja logimine
Püsiv andmebaasilogi, kus on iga töötleja läbilaskevõime, keskmine ja p95 kestus ning veamäär.
WP-Cron-i varulahendus
Kui shellile juurdepääs puudub, käivitab kord minutis toimuv WordPress cron sündmus ühekordse töötaja vaikejärjekorra jaoks.
Vahevara
Kihiline tööde vahevara kiiruspiirangute, erandite piiramise, ainulaadsuse, ajalõppude ja kattumise vältimise jaoks.
PHP 8.2+
Loendid, kirjutuskaitstud klassid, match-avaldused, konstruktori parameetrite edendamine ja PHP atribuudid.
Miks Queuety
Olek asub MySQL-is
Järjekorra read, töövoo olek, logid, signaalid ja voogedastatud osad salvestatakse asukohas MySQL, nii et töötaja taaskäivitamine ei kaota orkestreerimise olekut. Iga sammu piir salvestab olekuuuenduse, töö lõpetamise ja järgmise töö järjekorda lisamise ühe tehinguna.
Lehepäringust sõltumatult
WP-Cron käivitub ainult lehe külastamisel ning 60-sekundilise LLM-kutse lõpetab 30-sekundiline PHP ajalõpp. Queuety töötajad töötavad kaua kestvas WP-CLI protsessis ja võtavad töid vastu liiklust ootamata.
Piirangud agentide käivitustele
for_each() koos kvoorumirežiimi, kinnitusetappide ja piirangutega, nagu max_transitions() ja max_state_bytes(), hoiavad agentide pikad käivitused määratletud piirides.
Kasutatav ka väljaspool WordPress-i
Andmebaasil põhinev tuum töötab igas PHP protsessis, mis saab avada sama andmebaasi, nii et teine rakendus saab töid saata, signaale edastada ja töövoo olekut lugeda. Toimingute käivitajad, sild WP-Cron ja käsud WP-CLI vajavad siiski WordPress-i.
Võrdlus
Kuidas Queuety seostub ajastajate ja töövoomootoritega, mida WordPress arendajad juba tunnevad.
| Tööriist | Sobib hästi | Erinevus võrreldes Queuety-ga |
|---|---|---|
| WP-Cron | Sobib hästiSisseehitatud WordPress ei vaja jagatud majutuses juurdepääsu süsteemi ajastajale ning tähtajast maha jäänud ülesanne käivitub järgmisel lehe laadimisel, selle asemel et kaduma minna. | Erinevus võrreldes Queuety-gaQueuety töötajad töötavad saidi liiklusest sõltumatult ja vajavad pikaajaliselt töötavat protsessi wp queuety work. Selle sild WP-Cron teisendab korduvad sündmused ajakavaks, kuid ei käivita veel nende hook-callback'e, seega jäävad need endiselt WP-Cron hallata. |
| Action Scheduler | Sobib hästiLoodud pluginates ja teemades levitamiseks ilma serverile juurdepääsuta. See töötleb iga kuu miljoneid tellimuste makseid ja veebikonksude päringuid teenuse WooCommerce jaoks ning logib iga toimingu haldusliideses. | Erinevus võrreldes Queuety-gaAction Scheduler käivitab konksu hiljem, näiteks viivitusega do_action(). Queuety lisab mitmeastmelised töövood, mille olek säilib sammude vahel, signaali- ja kinnituse ootamise ning olekumasinad. Neid saab uurida käskudega WP-CLI, näiteks wp queuety workflow timeline. |
| Temporal | Sobib hästiPüsiva käivitamise platvorm: sündmuste ajalugu salvestab töövoo iga sammu, nii et käivitus jätkub pärast krahhi või katkestust viimasest salvestatud sündmusest. Temporal Cloud on saadaval alternatiivina teenuse ise majutamisele. | Erinevus võrreldes Queuety-gaTemporal Service on Go server koos andmebaasiga, mis töötab teie rakenduse kõrval. Queuety hoiab oma olekut ühenduse WordPress andmebaasi tabelites MySQL ja käitab töötajaid käsu WP-CLI kaudu. |
Küsimused ja vastused
Lühikesed vastused Queuety dokumentatsioonist.
Vaikejärjekorra lihtsate tööde jaoks mitte. Plugin käivitab iga minut käsu WordPress cron kaudu ühekordse töötaja, kui WordPress cron töötab; iga käivitus käsitleb ühe töö. Korduvad ajakavad, kohandatud järjekorrad ja väiksem viivitus vajavad spetsiaalset wp queuety work protsessi.
Ei. See vajab mysqli-t või pdo_mysql-i ning kasutab WordPress all vaikimisi mysqli-t. Draiveri sundvalikuks määrake QUEUETY_DB_DRIVER väärtuseks auto, mysqli või pdo.
Tööd võetakse käsuga SELECT ... FOR UPDATE SKIP LOCKED, mida MySQL toetab alates versioonist 8.0 ja MariaDB alates versioonist 10.6. Projekti CI käivitub versiooniga MySQL 8.0.
Jah. Andmebaasil põhinev tuum — tööd, töötajad, töövood, signaalid, olekumasinad, artefaktid, logid, mõõdikud ja ajakavad — töötab otseühenduse kaudu. Töötajate kogumid vajavad ka konstante DB_HOST, DB_NAME, DB_USER ja DB_PASSWORD. Queuety::on_action(), replace_wp_cron(), plugina alglaadimine ja wp queuety käsud vajavad siiski WordPress-i.
Veel mitte. Queuety::replace_wp_cron() muudab korduvad wp_schedule_event() sündmused Queuety ajakavaks, kuid nende hook-callback'e veel ei käivitata. Seega hoidke alles WP-Cron sündmuste jaoks, mis peavad kindlasti käivituma. wp_schedule_single_event() sündmuste eest vastutab endiselt WP-Cron.
wp queuety work --workers=N loob fikseeritud töötajate kogumi ja käivitab krahhi korral alamprotsessid uuesti; selleks on vaja laiendusi pcntl ja posix. --min-workers ja --max-workers käivitavad kohanduva kogumi, mis kasvab järjekorra kasvades ja kahaneb töökoormuse vaibudes.
Paigaldage plugin, käivitage töötaja ja järgige juhendeid alates esimesest tööst kuni kinnitamise töövoogude ja olekumasinateni.