Queuety
Mehanizem za poteke dela WordPress.
wp plugin install https://github.com/inline0/queuety/releases/latest/download/queuety.zip --activateNajnovejša izdaja 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!',
] );V praksi
Potek dela, določen v PHP, in ukaz delavca, ki ga izvaja.
Potek dela z odobritvijo
Potek dela izvede korak, počaka 24 ur in se nato zaustavi pri wait_for_approval(), dokler drug proces ne pošlje signala approval.
Zakasnitev je shranjena v zbirki podatkov, zato se ohrani po ponovnih zagonih delavca in uvedbah, signal, poslan predčasno, pa se zabeleži in prevzame, ko potek dela doseže čakanje. Ob preklicu izvajanja se pokliče obravnavalnik 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=6Neposredno prevzemanje opravil MySQL
Vsak delavec deluje v dolgotrajnem procesu WP-CLI in prevzema opravila neposredno iz MySQL z uporabo FOR UPDATE SKIP LOCKED.
Zanesljivi poteki dela
Večstopenjski procesi s trajno shranjenim stanjem, ki preživi časovne omejitve PHP, zrušitve in ponovne poskuse.
Končni avtomati
Dolgotrajno stanje, vodeno z dogodki, z Queuety::machine(): določite stanja in prehode, pošiljajte dogodke ter berite časovnico.
Signali in odobritve
wait_for_signal(), wait_for_approval() in wait_for_input() zaustavijo potek dela, dokler ne prispe zunanji vnos.
Ravni prednosti
Štiri ravni, od nizke do nujne. Znotraj čakalne vrste se najprej prevzamejo opravila z višjo prednostjo.
Omejevanje hitrosti
Omejitve za posamezne obravnavalnike v drsečem časovnem oknu. Delavec, ki prevzame opravilo z omejeno hitrostjo, ga vrne v čakalno vrsto in počaka.
Ponavljajoča se opravila
Načrtovanje na podlagi intervalov in cron. Vgrajeni razčlenjevalnik cron brez zunanjih odvisnosti.
Vzporedni koraki
Korake poteka dela izvajajte sočasno in pred nadaljevanjem počakajte, da se vsi dokončajo.
Meritve in beleženje
Trajni dnevnik v zbirki podatkov s prepustnostjo, povprečnim trajanjem, trajanjem p95 in stopnjo napak za vsak obravnavalnik.
Nadomestni način WP-Cron
Brez dostopa do lupine se enkrat na minuto sproži dogodek WordPress cron, ki za privzeto čakalno vrsto zažene enkratnega delavca.
Vmesna programska oprema
Vmesna programska oprema za opravila v slogu čebule, ki omogoča omejitve hitrosti, omejevanje izjem, enoličnost, časovne omejitve in zaščito pred prekrivanjem.
PHP 8.2+
Naštevanja, razredi samo za branje, izrazi match, promocija konstruktorja in atributi PHP.
Zakaj Queuety
Stanje je shranjeno v MySQL
Vrstice čakalne vrste, stanje poteka dela, dnevniki, signali in pretočni odseki so shranjeni v MySQL, zato ponovni zagon delavca ne povzroči izgube stanja orkestracije. Na meji vsakega koraka se v eni transakciji potrdi posodobitev stanja, dokončanje opravila in uvrstitev naslednjega opravila v čakalno vrsto.
Zunaj zahtevka za stran
WP-Cron se sproži samo ob obiskih strani, klic LLM, ki traja 60 sekund, pa prekine 30-sekundna časovna omejitev PHP. Delavci Queuety delujejo v dolgotrajnem procesu WP-CLI in prevzemajo delo ne glede na promet.
Varovalke za izvajanje agentov
for_each() z načinom sklepčnosti, vrati za odobritev in omejitvami, kot sta max_transitions() in max_state_bytes(), ohranja dolgotrajna izvajanja agentov znotraj določenih meja.
Uporabno tudi zunaj WordPress
Jedro, podprto z zbirko podatkov, deluje v vsakem procesu PHP, ki lahko vzpostavi povezavo z isto zbirko podatkov, zato lahko druga aplikacija odprema opravila, pošilja signale in bere stanje poteka dela. Sprožilci dejanj, most WP-Cron in ukazi WP-CLI še vedno zahtevajo WordPress.
V primerjavi z
Kako je Queuety povezan z razporejevalniki in mehanizmi za poteke dela, ki jih razvijalci WordPress že poznajo.
| Orodje | Primerno za | Razlika v primerjavi z Queuety |
|---|---|---|
| WP-Cron | Primerno zaVgrajen je v WordPress, zato na deljenem gostovanju ne potrebuje dostopa do sistemskega razporejevalnika; opravilo, ki zamudi predvideni čas, se izvede ob naslednjem nalaganju strani, namesto da bi bilo izpuščeno. | Razlika v primerjavi z QueuetyQueuety delavci delujejo neodvisno od prometa na spletnem mestu in potrebujejo dolgotrajen proces wp queuety work. Njihov most WP-Cron ponavljajoče se dogodke pretvori v urnike, vendar njihovih povratnih klicev kavljev še ne izvaja, zato je WP-Cron še vedno odgovoren zanje. |
| Action Scheduler | Primerno zaZasnovan je za distribucijo vtičnikov in tem brez potrebe po dostopu do strežnika; vsak mesec obdela milijone plačil za Subscriptions in spletnih kljuk za WooCommerce, vsako dejanje pa zabeleži v skrbniškem vmesniku. | Razlika v primerjavi z QueuetyAction Scheduler izvede hook ob poznejšem času, na primer kot zakasnjeni do_action(). Queuety dodaja večstopenjske poteke dela s stanjem, ki se ohranja med koraki, čakanjem na signal in odobritev ter avtomati stanj; pregledate jih lahko z ukazi WP-CLI, kot je wp queuety workflow timeline. |
| Temporal | Primerno zaPlatforma za zanesljivo izvajanje: zgodovina dogodkov beleži vsak korak poteka dela, zato se izvajanje po zrušitvah ali izpadih nadaljuje od zadnjega zabeleženega dogodka; Temporal Cloud je na voljo kot alternativa samostojnemu gostovanju storitve. | Razlika v primerjavi z QueuetyStoritev Temporal je strežnik Go in zbirka podatkov, ki delujeta ob vaši aplikaciji. Queuety hrani svoje stanje v tabelah MySQL na povezavi z zbirko podatkov WordPress, delavce pa izvaja prek WP-CLI. |
Vprašanja in odgovori
Kratki odgovori iz dokumentacije za Queuety.
Za preprosta opravila v privzeti čakalni vrsti ne. Vtičnik vsako minuto zažene enkratnega delavca prek WordPress cron, dokler se sproža WordPress cron, pri čemer ob vsakem zagonu obdela eno opravilo. Ponavljajoči se urniki, čakalne vrste po meri in manjša zakasnitev zahtevajo namenski proces wp queuety work.
Ne. Potrebuje mysqli ali pdo_mysql, privzeto pa v okolju WordPress izbere mysqli. Določite QUEUETY_DB_DRIVER kot auto, mysqli ali pdo, da vsilite izbiro gonilnika.
Opravila se prevzemajo z ukazom SELECT ... FOR UPDATE SKIP LOCKED, ki ga MySQL podpira od različice 8.0, MariaDB pa od različice 10.6. CI projekta se izvaja z MySQL 8.0.
Da, jedro, podprto z zbirko podatkov: opravila, delavci, poteki dela, signali, avtomati stanj, artefakti, dnevniki, meritve in razporedi delujejo z neposredno povezavo Connection. Skupine delavcev potrebujejo tudi konstante DB_HOST, DB_NAME, DB_USER in DB_PASSWORD. Queuety::on_action(), replace_wp_cron(), zagon vtičnika in ukazi wp queuety še vedno zahtevajo WordPress.
Za zdaj še ne. Queuety::replace_wp_cron() pretvori ponavljajoče se dogodke wp_schedule_event() v razporede Queuety, vendar se njihovi povratni klici hook še ne izvajajo, zato za dogodke, ki se morajo sprožiti, še naprej uporabljajte WP-Cron. Dogodki iz wp_schedule_single_event() ostanejo pri WP-Cron.
wp queuety work --workers=N ustvari statično skupino procesov in znova zažene podrejene procese, ki se zrušijo; potrebni sta razširitvi pcntl in posix. --min-workers in --max-workers zaženeta prilagodljivo skupino, ki se poveča ob naraščanju zaostanka in zmanjša, ko se ta umiri.
Namestite vtičnik, zaženite delavca in sledite vodnikom od prvega opravila do potekov dela z odobritvami in avtomatov stanj.