Queuety
WordPress darbplūsmu dzinis.
wp plugin install https://github.com/inline0/queuety/releases/latest/download/queuety.zip --activateJaunākais laidiens 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!',
] );Praksē
Darbplūsma, kas definēta PHP, un apstrādātāja komanda, kas to palaiž.
Apstiprināšanas darbplūsma
Darbplūsma izpilda darbību, gaida 24 stundas un pēc tam aptur izpildi pie wait_for_approval(), līdz cits process nosūta approval signālu.
Aizkave tiek saglabāta datubāzē, tāpēc tā saglabājas pēc apstrādātāju restartēšanas un izvietošanas, bet agrāk nosūtīts signāls tiek reģistrēts un apstrādāts, kad darbplūsma sasniedz gaidīšanas posmu. Atceļot izpildi, tiek izsaukts apstrādātājs 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=6Tieši MySQL pretenzijas
Katrs izpildītājs darbojas ilglaicīgā WP-CLI procesā un paņem uzdevumus tieši no MySQL, izmantojot FOR UPDATE SKIP LOCKED.
Uzticamas darbplūsmas
Vairāku darbību procesi ar pastāvīgu stāvokli, kas saglabājas pēc PHP taimautiem, avārijām un atkārtotiem mēģinājumiem.
Stāvokļu mašīnas
Ilglaicīgs, notikumu vadīts stāvoklis ar Queuety::machine(): definējiet stāvokļus un pārejas, sūtiet notikumus, skatiet laika skalu.
Signāli un apstiprinājumi
wait_for_signal(), wait_for_approval() un wait_for_input() aptur darbplūsmu, līdz pienāk ārēja ievade.
Prioritāšu līmeņi
Četri līmeņi — no zemas līdz steidzamai. Vienā rindā vispirms tiek paņemti uzdevumi ar augstāku prioritāti.
Ātruma ierobežošana
Katra apstrādātāja ierobežojumi slīdošā periodā. Izpildītājs, kas paņem uzdevumu, kuram piemērots ātruma ierobežojums, ieliek to atpakaļ un gaida.
Periodiski uzdevumi
Plānošana pēc intervāla un cron. Iebūvēts cron parsētājs bez ārējām atkarībām.
Paralēlās darbības
Palaidiet darbplūsmas darbības vienlaikus un pirms turpināšanas sagaidiet, līdz tās visas ir pabeigtas.
Metrika un žurnalēšana
Pastāvīgs datubāzes žurnāls ar katra apstrādātāja caurlaidspēju, vidējo ilgumu un p95 ilgumu, kā arī kļūdu biežumu.
WP-Cron rezerves risinājums
Ja nav piekļuves čaulai, reizi minūtē WordPress cron notikums palaiž vienreizēju apstrādātāju noklusējuma rindai.
Starpprogrammatūra
Sīpola slāņiem līdzīga darbu starpprogrammatūra ātruma ierobežojumiem, izņēmumu biežuma ierobežošanai, unikalitātei, taimautiem un pārklāšanās novēršanai.
PHP 8.2+
Uzskaitījumi, tikai lasāmas klases, match izteiksmes, konstruktoru parametru veicināšana un PHP atribūti.
Kāpēc Queuety
Stāvoklis tiek glabāts MySQL
Rindas ieraksti, darbplūsmu stāvoklis, žurnāli, signāli un straumētās daļas tiek glabātas MySQL, tāpēc pēc apstrādātāja restartēšanas orķestrēšanas stāvoklis netiek zaudēts. Katras darbības robežā vienā transakcijā tiek apstiprināts stāvokļa atjauninājums, darba pabeigšana un nākamā darba pievienošana rindai.
Ne lapas pieprasījuma kontekstā
WP-Cron tiek palaists tikai lapas apmeklējuma laikā, un 60 sekunžu LLM izsaukumu pārtrauc 30 sekunžu PHP taimauts. Queuety apstrādātāji darbojas ilgstošā WP-CLI procesā un sāk darbu, negaidot datplūsmu.
Aģentu darbību ierobežojumi
for_each() ar kvoruma režīmu, apstiprināšanas vārtejām un tādiem ierobežojumiem kā max_transitions() un max_state_bytes() nodrošina, ka ilgstošas aģentu darbības nepārsniedz noteiktās robežas.
Izmantojams ārpus WordPress
Datubāzē balstītais kodols darbojas jebkurā PHP procesā, kas var atvērt to pašu datubāzi, tāpēc cita lietotne var nosūtīt darbus, sūtīt signālus un nolasīt darbplūsmas statusu. Darbību trigeriem, WP-Cron tiltam un WP-CLI komandām joprojām nepieciešams WordPress.
Salīdzinājums ar
Kāda ir Queuety saistība ar plānotājiem un darbplūsmu dzinējiem, ko WordPress izstrādātāji jau pazīst.
| Rīks | Piemērots | Atšķirība no Queuety |
|---|---|---|
| WP-Cron | PiemērotsIebūvēts WordPress, tam nav nepieciešama piekļuve sistēmas plānotājam koplietotā mitināšanā, un uzdevums, kas nokavē savu izpildes laiku, tiek palaists nākamajā lapas ielādes reizē, nevis atmests. | Atšķirība no QueuetyQueuety apstrādātāji darbojas neatkarīgi no vietnes datplūsmas, un tiem nepieciešams ilgstošs wp queuety work process process. Tā WP-Cron tilts pārvērš periodiskos notikumus par grafikiem, taču pagaidām neizpilda to hook atzvanus, tāpēc to pārvaldību joprojām nodrošina WP-Cron. |
| Action Scheduler | PiemērotsParedzēts izplatīšanai spraudņos un tēmās bez nepieciešamības piekļūt serverim; tas katru mēnesi apstrādā miljoniem abonementu maksājumu un WooCommerce tīmekļa āķu izsaukumu, kā arī reģistrē katru darbību administrēšanas saskarnē. | Atšķirība no QueuetyAction Scheduler izpilda āķi vēlāk, piemēram, aizkavētu do_action(). Queuety nodrošina vairāku darbību darbplūsmas, kuru stāvoklis saglabājas starp darbībām, signālu un apstiprinājumu gaidīšanu, kā arī stāvokļu automātus; tos var pārskatīt, izmantojot WP-CLI komandas, piemēram, wp queuety workflow timeline. |
| Temporal | PiemērotsNoturīga izpildes platforma: notikumu vēsturē tiek reģistrēta katra darbplūsmas darbība, tāpēc pēc avārijas vai darbības pārtraukuma izpilde turpinās no pēdējā reģistrētā notikuma; Temporal Cloud tiek piedāvāts kā alternatīva pakalpojuma mitināšanai pašu spēkiem. | Atšķirība no QueuetyTemporal Service ir Go serveris un datubāze, kas darbojas līdzās jūsu lietotnei. Queuety glabā stāvokli MySQL tabulās, izmantojot WordPress datubāzes savienojumu, un palaiž apstrādātājus ar WP-CLI. |
Jautājumi un atbildes
Īsas atbildes no Queuety dokumentācijas.
Vienkāršiem darbiem noklusējuma rindā tā nav nepieciešama. Spraudnis reizi minūtē, izmantojot WordPress cron, palaiž vienreizēju apstrādātāju, ja vien darbojas WordPress cron, un katrā palaišanas reizē apstrādā vienu darbu. Periodiskiem grafikiem, pielāgotām rindām un mazākai aizkavei nepieciešams īpašs wp queuety work process process.
Nē. Tam nepieciešams mysqli vai pdo_mysql, un WordPress pēc noklusējuma izvēlas mysqli. Lai norādītu draiveri, definējiet QUEUETY_DB_DRIVER kā auto, mysqli vai pdo.
Darbi tiek saņemti ar SELECT ... FOR UPDATE SKIP LOCKED, ko MySQL atbalsta, sākot ar versiju 8.0, bet MariaDB — sākot ar 10.6. Projekta CI tiek izpildīta ar MySQL 8.0.
Jā. Datubāzē balstītais kodols — darbi, apstrādātāji, darbplūsmas, signāli, stāvokļu automāti, artefakti, žurnāli, metrika un grafiki — darbojas ar tiešu Connection savienojumu. Apstrādātāju pūliem nepieciešamas arī konstantes DB_HOST, DB_NAME, DB_USER un DB_PASSWORD. Queuety::on_action(), replace_wp_cron(), spraudņa sākotnējā ielāde un wp queuety komandas joprojām prasa WordPress.
Pagaidām ne. Queuety::replace_wp_cron() pārvērš periodiskos wp_schedule_event() notikumus par Queuety grafikiem, taču to hook atzvani vēl netiek izpildīti, tāpēc notikumiem, kuriem jānostrādā, joprojām izmantojiet WP-Cron. wp_schedule_single_event() notikumi paliek WP-Cron pārziņā.
wp queuety work --workers=N palaiž fiksēta lieluma pūlu un restartē avarējušos pakārtotos procesus; tam nepieciešami pcntl un posix paplašinājumi. --min-workers un --max-workers palaiž pielāgotu pūlu, kas pieaug, palielinoties neapstrādāto darbu skaitam, un sarūk, kad to kļūst mazāk.
Instalējiet spraudni, palaidiet apstrādātāju un sekojiet ceļvežiem no pirmā darba līdz apstiprināšanas darbplūsmām un stāvokļu automātiem.