Pāriet uz saturu

Queuety

WordPress darbplūsmu dzinis.

Terminālis
wp plugin install https://github.com/inline0/queuety/releases/latest/download/queuety.zip --activate

Jaunākais laidiens v0.22.0 GPL-2.0-or-later WordPress 6.4+, PHP 8.2+

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().

PHP
$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' ] );

Tieš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.

Queuety salīdzinājumā ar citiem rīkiem
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.

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.