Kaip žingsnis po žingsnio pristabdyti ir valdyti eiles „Laravel“ programoje

Paskutiniai pakeitimai: 5 gruodis 2025
  • „Laravel“ siūlo vieningą eilių API su keliomis tvarkyklėmis (duomenų bazė, „Redis“, SQS…) ir jungčių bei loginių eilių atskyrimu.
  • Darbai leidžia perkelti sunkias užduotis į foną, palaikant serializavimo modelius, tarpinę programinę įrangą, vienkartines užduotis, šifravimą, paketus ir eilutes.
  • Darbuotojai valdomi naudojant „queue:work“, „Supervisor“ ir tokias komandas kaip „queue:pause/queue:continue“, kurios kontroliuoja pakartotinius bandymus, skirtą laiką ir prioritetus.
  • Yra visa gedimų, stebėjimo ir testavimo ekosistema (failed_jobs, queue:retry, queue:monitor, Queue::fake), kuri užtikrina eilių patikimumą gamyboje.

Eilių valdymas Laravel sistemoje

Darbas su eilėmis „Laravel“ kalboje yra beveik privalomas bet kuriame rimtame projekte: el. laiškų siuntimas, CSV failų apdorojimas, PDF failų generavimas, vaizdų dydžio keitimas, išorinių API iškvietimas... Jei visa tai atliekama pagrindinėje HTTP užklausoje, svetainė tampa lėta, atsiranda 500 klaidų, o vartotojas galiausiai desperatiškai spokso į tuščią ekraną.

Geros naujienos yra tai, kad „Laravel“ siūlo galingą ir lanksčią eilių valdymo infrastruktūrą , leidžiančią deleguoti sunkius darbus foniniams procesams, valdyti juos pagal prioritetus, grupuoti į paketus, stebėti, bandyti iš naujo, kai jie nepavyksta, ir net laikinai pristabdyti darbuotojus techninei priežiūrai. Atidžiau panagrinėkime (ir nieko nepraleiskite), kaip išnaudoti visas jos galimybes, įskaitant tai, kaip pristabdyti, atnaujinti ir valdyti jos elgseną gamyboje.

Pagrindinės sąvokos: ryšiai, eilės ir tvarkyklės

„Laravel“ sistemoje, prieš ką nors pristabdant, reikia suprasti skirtumą tarp eilių jungtys ir pačios eilės. Į config/queue.php turite masyvą connections kur apibrėžiate kiekvieną galinę dalį: duomenų bazė, „Redis“, „Beanstalkd“, „SQS“, sinchronizavimas, „Null“, perjungimas į atsarginę kopiją, „RabbitMQ“ (jei pridėsite) ir pan.

Kiekvienas ryšys gali turėti kelis loginės eilės (pavadinimai, tokie kaip default, emails, high, low, importsAtributas queue Kiekvienas ryšys nurodo, kuri yra numatytoji eilė, į kurią bus keliami darbai, jei nenurodyta kita. onQueue()Tokiu būdu galite atlikti tokius veiksmus kaip:

  • Greita eilė el. laiškams ar trumpiems sandoriams.
  • Kitas žemo prioriteto ilgoms užduotims, tokioms kaip vaizdo įrašų ar didelių ataskaitų apdorojimas.
  • Eilės, suskirstytos pagal užduoties tipą: imports, notificaciones, reportesIr tt

Kai paleidžiate darbuotoją su php artisan queue:workPagal numatytuosius nustatymus jis klausosi eilės, nurodytos kaip numatytas pasirinktame ryšyje. Jei norite nustatyti prioritetus, galite perduoti kelias kableliais atskirtas eiles:

php artisan queue:work redis --queue=high,default,low

Tokiu būdu darbuotojas pirmiausia apdoroja „high“ , tada „default“ ir tik tada „low“ , o tai labai svarbu, kai sistema įkelta ir nenorite, kad 30 minučių ataskaita blokuotų aukšto prioriteto el. laiškus.

Eilių tvarkyklės ir būtinos sąlygos

„Laravel“ siūlo vieningą API keliems eilių tvarkyklėms , tačiau kiekviena turi savo specifines funkcijas ir priklausomybes. Prieš aptariant darbuotojų pristabdymą, labai svarbu pasirinkti tinkamą tvarkyklę.

Vairuotojų duomenų bazė

Vairuotojas duomenų bazė Jis saugo užduotis SQL lentelėje (paprastai jobsJį lengva nustatyti ir jis puikiai tinka mažiems projektams arba kūrimo aplinkoms, kuriose nenorite žaisti su „Redis“ ar SQS.

Pagrindiniai žingsniai:

  • Sukurti migraciją: php artisan queue:table (arba naujesnėse versijose jis pateikiamas kaip create_jobs_table numatytas).
  • Vykdyti migracijas: php artisan migrate.
  • Konfigūruoti QUEUE_CONNECTION=duomenų bazė į .env ir patvirtinkite config/queue.php kad 'default' => env('QUEUE_CONNECTION','database').

Tai patogu ir pakankamai patikima, tačiau esant daugybei eilių ir dideliam srautui, tai gali tapti kliūtimi , nes viskas vyksta per tą pačią reliacinę duomenų bazę.

Vairuotojas Redis

„Redis“ tvarkyklė yra standartinis darbinis arkliukas gamyboje. Ji greita, palaiko pažangias funkcijas (užrakinimą, greičio ribojimą, atominius užraktus, „Horizon“ ir kt.) ir labai gerai keičiamo dydžio.

Svarbūs punktai:

  • Jums reikia sukonfigūruoti „Redis“ ryšį config/database.php.
  • Pasirinkimai serializer y compression iš Redis Jie nesuderinami su eilės tvarkytoju.
  • Jei naudojate Redis klasterisEilių pavadinimai turi turėti maišos žymę, pavyzdžiui {default}kad visi tos eilės raktai patektų į tą patį lizdą.
  • Pasirinkimas block_for Tai leidžia darbuotojui blokuoti laukiant užduočių kelias sekundes, užuot nuolat apklausus: taupo procesorių ir sumažina užklausų skaičių „Redis“ serveryje.

Pavyzdžiui:

'redis' => ,

Jei įdėsite blokas_už = 0Darbuotojas lieka užblokuotas neribotą laiką, kol atsiras laisvas darbas, tai reikia turėti omenyje, jei norite, kad jis greitai reaguotų į tokius signalus kaip SIGTERM arba pristabdymo komandas.

Kiti tvarkyklės: SQS, Beanstalkd, null, atsarginis kopijavimas…

Be duomenų bazių ir „Redis“, „Laravel“ palaiko ir kitas sistemas :

  • Amazon SQSValdomos eilės AWS sistemoje su palaikymu FIFOPranešimų grupės, dublikatų naikinimas ir išplėstiniai matomumo nustatymai. Reikalingas SDK. aws/aws-sdk-php.
  • Pupų stiebasLabai greita ir paprasta, naudojant pakuotę pda/pheanstalk.
  • sync: atlieka užduotis nedelsiant tame pačiame procese. Naudinga kūrimo ar testavimo metu, bet gamyboje tai praktiškai tas pats, kas visai nenaudoti eilių.
  • null: Atmeta užduotis, kai tik jos „išsiunčiamos“. Naudojama norint visiškai išjungti eilių sistemą.
  • nesėkmingasTai leidžia sukonfigūruoti kelis ryšius, o jei pagrindinis nutrūksta, „Laravel“ bando perkelti užduotį į kitą sąraše esantį ryšį. Puikiai tinka aplinkoms, kuriose didelis prieinamumas yra kritinis.
  Electron JS: viskas, ką reikia žinoti

Darbuotojų pristabdymo ir atnaujinimo lygmenyje logika praktiškai ta pati, nepriklausomai nuo tvarkyklės, nes ji valdoma naudojant „Artisan“ komandas ir „ Worker“ klasę , o ne iš eilės serverio.

Darbo kūrimas ir modelio serializavimas

Un darbas „Laravel“ kalboje tai tiesiog klasė, apimanti eilėje vykdomą užduotį. Paprastai ji generuojama naudojant „Artisan“ ir išsaugoma aplanke app/Jobs.

Norėdami sukurti:

php artisan make:job ProcessPodcast

Sukurta klasė padargai ShouldQueue ir paprastai naudoja bruožus Dispatchable, InteractsWithQueue, Queueable y SerializesModelsŠirdis slypi metode handle()ką darbuotojas daro, kai atvyksta darbas.

Ypač galinga funkcija yra automatinis „Eloquent“ modelių serializavimas . Jei priimate modelį užduočių konstruktoriuje, „Laravel“ į eilę neįtraukia viso objekto, tik jo identifikatorių. Kai užduotis apdorojama, ji rekonstruoja modelį iš duomenų bazės su įkeltais ryšiais.

Tipinis pavyzdys (pseudokode, kad nereikėtų kartoti pažodžiui):

  • Statybininkas gauna Podcast'as $podcast'as.
  • Bruožas SerializesModels Jis yra atsakingas už ID išsaugojimą.
  • En handle(AudioProcessor $processor) Jūs atliekate sunkų darbą (pavyzdžiui, apdorojate garsą).

Jei nenorite, kad modelio ryšiai būtų serializuoti (kad naudingoji apkrova nebūtų didelė), galite naudoti $model->withoutRelations() arba PHP 8 atributas # statytojo reklamuojamame sklype.

Priklausomybės injekcija rankenos metode

Kitas privalumas yra tai, kad galite įterpti paslaugas tiesiai į rankenos metodą (tarsi tai būtų valdiklis), nes „Laravel“ taip pat naudoja paslaugų konteinerį „Jobs“ funkcijoje. Pavyzdžiui, galite pateikti užklausą AudioProcessorHTTP klientai, saugyklos ir kt., o sistema pasirūpina jų sprendimu.

Jei jums reikia itin tikslaus vadinamojo valdymo handlegalite naudoti Container::bindMethod() paslaugų teikėjo įmonėje ir patys apibrinti įvedimo logiką, tačiau daugeliu atvejų nereikia visko taip komplikuoti.

Darbo tarpinė programinė įranga

Lygiai taip pat, kaip maršrutai turi tarpinę programinę įrangą, taip ir darbai gali turėti specifinė tarpinė programinė įranga kurie paleidžiami prieš ir po užduoties. Tai labai sumažina pasikartojančio kodo kiekį metoduose handle() ir tai ypač naudinga:

  • Greičio ribojimas su Redisu.
  • išvengti persidengimai kūrinių, kurie liečia tą patį išteklių.
  • Reguliarios išimtys nestabilioms API.
  • Užduočių praleidimas tam tikromis sąlygomis (Skip tarpinė programinė įranga).

Tarpinė programinė įranga paprastai dedama į app/Jobs/Middleware ir grąžinami iš metodo middleware() Iš Jobo knygos. Konceptualus pavyzdys:

public function middleware(): array { return ;

Specialūs užduočių tipai: unikalūs, užšifruoti ir užrakinti

„Laravel“ leidžia pažymėti tam tikrus darbus kaip unikalus siekiant užtikrinti, kad tuo pačiu metu eilėje nebūtų du identiški egzemplioriai. Tai pasiekiama įdiegiant sąsają ShouldBeUnique o ShouldBeUniqueUntilProcessingir palaiko rakto apibrėžimą uniqueId() ir laikas uniqueFor.

Tai idealiai tinka tokiems dalykams kaip:

  • Perskaičiuokite produkto paieškos indeksą: tik vieną kartą vienam produktui kol baigsis.
  • Sinchronizavimas su išorinėmis paslaugomis, kurios neleidžia vienu metu pateikti užklausų dėl to paties ištekliaus.

Po apačia „Laravel“ naudoja atominis užraktas talpyklos („Redis“, „memcached“, duomenų bazė ir kt.). Taip pat galite pasirinkti to užrakto talpyklos tvarkyklę naudodami uniqueVia().

Be to, yra sąsaja ShouldBeEncrypted, kuriuo nurodote, kad visas Darbas yra Prieš eidami į eilę, įveskite savo kodąLabai naudinga perduodant jautrius duomenis ir nenorite, kad jie keliautų paprastu tekstu per „Redis“, „SQS“ ar duomenų bazę.

Siunčiamos, atidėtos ir vykdomos užduotys skirtingais režimais

Kai jūsų užduotis bus apibrėžta, ją paleisite su Job::dispatch() iš valdiklių, įvykių klausytojų, „Artisan“ komandų ar net uždarymų. Parametrai, kuriuos perduodate dispatch Jie eina tiesiai pas Jobo statytoją.

Įdomūs variantai:

  • dispatchIf() y dispatchUnless() sąlygoti siuntą vienoje linijoje.
  • delay() kad užduotis nebūtų apdorojama iki konkrečios datos / laiko.
  • dispatchAfterResponse() o afterResponse() en dispatch() Uždarymai, kurie atideda vykdymą, kol bus išsiųstas HTTP atsakymas, bet tame pačiame PHP procese.
  • dispatchSync() vykdyti užduotį sinchroniškai (nepereinant per eilę), bet pakartotinai naudojant tą pačią klasę.
  • Specialūs ryšiai, pvz. deferred o background vykdyti po atsakymo, tame pačiame procese arba naujame PHP procese.

Galiausiai, galite nurodyti ryšį ir eilę naudodami grandininius metodus onConnection() y onQueue(), siunčiant arba užduočių kūrimo įrankyje.

Tikslus valdymas: pakartotiniai bandymai, atidėjimai, skirtojo laiko apribojimai ir klaidų apdorojimas

Didelė darbo su eilėmis „Laravel“ sistemoje dalis yra sprendimas , kiek kartų bandyti atlikti užduotį iš naujo , kiek laiko laukti tarp bandymų ir kada tai laikyti nesėkme.

  Kas yra „front-end“ kūrėjas ir ką jie daro?

Galimos parinktys:

  • --tries en queue:work nustatyti maksimalų bandymų skaičių visiems to darbuotojo darbams (nebent užduotis apibrėžia savo) $tries o tries()).
  • $tries arba metodas tries() Job klasėje, skirtoje valdyti kiekvieną Job.
  • retryUntil() pasakyti: „Bandykite dar kartą tiek, kiek norite, iki šio karto, po to tai bus nesėkmė.“ Jei tai sutampa su tries, komanda retryUntil.
  • $maxExceptions nutraukti, kai problema kyla dėl pasikartojančių neapdorotų išimčių.
  • $timeout o --timeout nurodyti, kiek sekundžių gali veikti užduotis, kol darbuotojas sunaikins antrinį procesą.
  • $failOnTimeout pažymėti užduotį kaip nepavykusią, jei pasibaigs skirtasis laikas.
  • $backoff metodas backoff() apibrėžti, kiek laiko laukti tarp pakartotinių bandymų, net ir naudojant eksponentines vertes.

Jei užduotis išmeta neaptiktą išimtį, „Laravel“... paleidžia atgal į uodegą kol bus išnaudoti sukonfigūruoti bandymai. Tai galite valdyti rankiniu būdu naudodami release($segundos) o fail($exception) kai norite sąmoningai pažymėti užduotį kaip nepavykusią.

Nepavykę darbai, failed_jobs lentelė ir genėjimas

Kai Jobas išsemia visas pastangas, jis pradedamas laikyti nepavykęs darbas ir Laravel įterpia jį į lentelę failed_jobs (arba „DynamoDB“, jei taip sukonfigūruosite). Šioje lentelėje saugomi UUID, ryšys, eilė, užduoties apkrova ir iškelta išimtis.

Naudingos komandos:

  • php artisan queue:failed išvardyti nepavykusius.
  • php artisan queue:retry <id|all> kad vėl juos išbandyčiau.
  • php artisan queue:forget <id> norint ištrinti vieną.
  • php artisan queue:flush ištrinti viską (naujesnėse versijose yra valandų parinktis).
  • php artisan queue:prune-failed --hours=48 automatiškai genėti senus įrašus.

Darbo vietose galite apibrėžti metodą failed(Throwable $exception) Papildomam valymui: praneškite vartotojui, atšaukite dalinius veiksmus, rašykite specializuotus žurnalus ir pan. Atkreipkite dėmesį, kad iškvietimui sukuriamas naujas užduoties egzempliorius. failed()Todėl nepasikliaukite nuosavybės pakeitimais, atliktais handle().

Darbų paketavimas: darbų paketai ir jų sujungimas su eilutėmis

Kai reikia paleisti šimtus ar tūkstančius susijusių užduočių (pavyzdžiui, importuoti milžinišką CSV failą dalimis, apdoroti failus partijomis, valyti duomenis ir pan.), patartina naudoti „Laravel“ paketinio apdorojimo funkciją .

Pagrindinis srautas:

  • sukurti lentelę job_batches su php artisan queue:batches-table && php artisan migrate.
  • Pažymėkite darbus, kurie bus partijų, turinčių savybę, dalis Batchable.
  • Naudoti Bus::batch() siųsti darbų rinkinį su grįžtamaisiais iškvietimais then, catch y finally.
  • Pasiekite kiekvienos užduoties paketą naudodami $this->batch() ir patikrinkite, ar jis atšauktas.
  • Galimybė pridėti daugiau darbų prie vykdomos partijos su $this->batch()->add().

Paketai puikiai integruojasi su grandinėmis : galite turėti grandines paketo viduje arba paketus kaip didesnės grandinės elementus. Tai ypač naudinga, kai norite, kad kelios grandinės veiktų „lygiagrečiai“ ir suaktyvintų veiksmą, kai visos jos bus baigtos.

Darbuotojų vykdymas, prioritetai ir paskirstymas

Visa eilių magija atsiranda todėl, kad turite vienas ar daugiau darbuotojų vykdydamas komandą queue:work (o queue:listen(nors pastarasis yra mažiau efektyvus). Šie procesai yra ilgai veikiantys demonai, kurie klausosi savo atitinkamų eilių.

Pagrindinės parinktys queue:work:

  • Conexión: php artisan queue:work redis, queue:work databaseIr tt
  • Kola: --queue=high,default,low teikti pirmenybę.
  • -vienuolika: apdoroja vieną užduotį ir išeina.
  • –maks. darbo vietų: apdoroja X užduotis ir jas nutraukia (kad periodiškai paleistų darbuotojus iš naujo ir atlaisvintų atmintį).
  • –maksimalus laikas: apdorojama N sekundžių ir tada uždaroma.
  • –miegoti: laukimo sekundės, kai nėra laisvų darbo vietų.
  • –stop-when-emit: ištuština eilę ir tvarkingai užsidaro (idealiai tinka „Docker“ aplinkose arba vienkartinėms užduotims).
  • – laiko limitas: sekundžių skirtasis laikas vienai užduočiai, kaip minėjome anksčiau.
  • - jėga: apdoroti užduotis net jei programa veikia priežiūros režimu.

Kadangi šie procesai yra ilgai veikiantys, gamybinėje aplinkoje X darbuotojams paleisti, jiems paleisti iš naujo, jei jie sugenda, ir žurnalams tvarkyti beveik visada naudojamas procesų stebėjimo įrankis , pvz., „Supervisor“ (sistemoje „Linux“). Tipiškas „Supervisor“ konfigūracijos blokas „Laravel“ sistemoms apibrėžia:

  • komanda su php artisan queue:work ... betono.
  • numprocs nurodyti, kiek darbuotojų paleisti lygiagrečiai.
  • Žurnalų keliai, naudotojas, automatinis paleidimas iš naujo ir kt.

Eilių pristabdymas ir atnaujinimas Laravel sistemoje

Pereikime prie to, kas dažnai svarbu atliekant techninę priežiūrą: kaip pristabdyti eilės darbuotojus jų staigiai nesustabdant ir nepaliekant nebaigtų darbų. „Laravel“ siūlo keletą naujesnių, kai kurie klasikinių mechanizmų, skirtų tai valdyti.

Pauzė: eilė:pauzė ir pertraukimo signalai

Naujausiose „Laravel“ versijose pridedamos specialios komandos, skirtos pristabdyti ir atnaujinti darbuotojų vykdymą :

  • php artisan queue:pause: nurodo sistemai nustoti priimti naujus darbus, bet leisti jau vykdomiems užbaigti.
  • php artisan queue:continue: tęsia naujų užduočių apdorojimą nuo ten, kur buvo baigta.
  Variacijos infliacijos koeficiento (VIF) apskaičiavimas C# ir programinės įrangos projektavime

Šios komandos veikia siųsdamos signalus darbuotojams per talpyklos mechanizmą, kurį „Laravel“ naudoja viduje. Štai kodėl svarbu turėti tinkamai sukonfigūruotą talpyklos tvarkyklę („memcached“, „redis“, „database“, „file“ ir kt.), net jei jūsų tikroji talpyklos eilė yra kažkas kita.

Svarbu: pristabdžius eilę ar darbuotoją, eilėje jau esantys darbai neatšaukiami ir neištrinami ; tai tiesiog neleidžia pašalinti daugiau darbų iš eilės, kol trunka pristabdymas.

Sutrikimų ir jų poveikio našumui apklausa

Kiekvieną kartą, kai darbuotojas baigia užduotį, „Laravel“ tikrina talpyklą, ar nėra paleidimo iš naujo, pristabdymo arba tęsimo signalų . Tai kainuoja nedaug, bet egzistuoja. Jei esate labai susitelkę į našumą ir žinote, kad jums nereikės pristabdyti ar paleisti darbuotojų iš naujo naudojant komandas, galite išjungti šią apklausą, iškviesdami:

Queue::withoutInterruptionPolling();

Arba netgi pakoreguokite statines savybes Illuminate\Queue\Worker , kad išjungtumėte konkrečius prisilietimus ($perkraunamas, $pristabdomasTačiau, jei tai padarysite ir bandysite naudoti queue:pause o queue:restartdarbininkai Jie nesužinosTai dizaino sprendimas, kurį reikia atidžiai apsvarstyti.

Rankinis pristabdymas naudojant „Supervisor“ arba „Docker“

Be pačių „Laravel“ komandų , gamybinėje aplinkoje procesai dažnai „pristabdomi“ netiesiogiai:

  • Programos sustabdymas „Supervisor“ lange (supervisorctl stop laravel-worker:*), kuris nužudo arba sustabdo darbuotojus.
  • Naudojant –stop-when-emit diegimuose, kad darbuotojai galėtų užbaigti eilėje esančius darbus ir tada išjungti.
  • Dockeryje leidžiant konteineriui apdoroti --stop-when-empty ir tada jis išsijungia.

Skirtumas su queue:pause Visiškai sustabdydami procesus, sustabdysite užduočių apdorojimą, kol darbuotojai vėl paleis darbą. vidinė pauzė Galite laikyti procesus atmintyje, laukdami komandos continueTai naudinga greitam atkuriamam diegimui arba trumpiems priežiūros laikotarpiams.

Duomenų bazės transakcijos ir after_commit

Klasikinė klaida: užduočių siuntimas duomenų bazės transakcijų viduje. Jei nebūsite atsargūs, darbuotojas gali įvykdyti užduotį prieš įvykdant patvirtinimą, o laukiamo modelio ar duomenų bazėje dar gali nebūti.

Norėdami išvengti šio šokio, turite dvi galimybes:

  • Aktyvinti 'after_commit' => true eilės ryšio konfigūracijoje. Taigi, bet koks operacijos metu išsiųstas darbas atidedamas viduje, kol jis patvirtinamas.
  • Naudokite metodus pagal užduotį afterCommit() o beforeCommit() siunčiant, priverstinai naudoti tokį elgesį tik tam tikrose užduotise.

Jei operacija atšaukiama, jos metu išsiųstos užduotys atmetamos net neįtrauktos į eilę, o to paprastai ir siekiama norint išlaikyti nuoseklumą.

Stebėjimas, eilių valymas ir testavimas

Kai eilės jau veikia ir jos iš tikrųjų veikia, nepakanka tiesiog atmesti Jobs'us ir pamiršti apie tai; reikia stebėti ir testuoti, kaip viskas veikia.

Naudingi įrankiai ir komandos:

  • queue:clear norint ištuštinti konkrečią eilę (SQS, Redis, duomenų bazė).
  • queue:monitor stebėti užduočių skaičių tam tikrose eilėse ir suaktyvinti įvykį QueueBusy jei jie viršija tam tikrą ribą.
  • Darbo renginiai kaip Queue::before, Queue::after, Queue::looping y Queue::failing prijungti pasirinktinę logiką (žurnalus, metriką, atšaukimus ir kt.).
  • Klastotės testuose naudojant Queue::fake() y Bus::fake() patikrinti, ar užduotys, eilutės ar paketai buvo išsiųsti jų faktiškai nevykdant.

Testuose galite teigti tokius dalykus kaip „ši užduotis buvo įtraukta į eilę X kartų“ , „grandinė su šiomis užduotimis buvo išsiųsta tokia tvarka“ arba „jokia konkreti užduotis nebuvo įtraukta į eilę“, o tai suteikia daug saugumo sudėtinguose srautuose.

Su visa šia ekosistema – tvarkyklėmis, tokiomis kaip „Redis“ ar SQS, gerai suprojektuotomis užduotimis, tarpine programine įranga tiksliam derinimui, partijomis, grandinėmis, pakartotinio bandymo konfigūracija, prižiūrėtojo valdomais darbuotojais ir tokiomis komandomis kaip queue:pause y queue:continue– „Laravel“ leidžia valdyti foninį apdorojimą milimetro tikslumu – nuo ​​įprasto el. laiškų siuntimo iki paskirstytos eilių architektūros su atsarginiu perjungimu, užtikrinant, kad jūsų programa ir toliau greitai reaguotų HTTP lygmenyje, kol po juo atliekamas didelis darbas, neužblokuojant vartotojo.

Laravel Framework
Susijęs straipsnis:
Galingas Laravel karkasas