- I-Laravel inikezela nge-API yomugqa ehlanganisiwe enabashayeli abaningi (isizindalwazi, i-Redis, i-SQS…) kanye nokuhlukaniswa phakathi kokuxhumana nolayini abanengqondo.
- Imisebenzi ivumela imisebenzi enzima ukuthi iyiswe ngemuva, ngokusekelwa kwamamodeli e-serializing, i-middleware, imisebenzi ephuma kanye, ukubethela, amaqoqo, nezintambo.
- Abasebenzi baphathwa ngomugqa:umsebenzi, uSupervisor nemiyalo efana nolayini:ikhefu/umugqa:qhubeka,ukulawula ukuzama futhi, ukuvala isikhathi nezinto ezibalulekile.
- Kukhona i-ecosystem ephelele yokwehluleka, ukuqapha nokuhlola (imisebenzi_yehlulekile, umugqa:zama futhi, umugqa:qapha, Umugqa::inkohliso) eyenza imigqa ithembeke ekukhiqizeni.
Ukusebenza ngemigqa eLaravel cishe kuyimpoqo kunoma yimuphi umsebenzi ongathi sína: ukuthumela ama-imeyili, ukucubungula amafayela e-CSV, ukukhiqiza ama-PDF, ukushintsha usayizi wezithombe, ukubiza ama-API angaphandle… Uma konke lokho kwenziwa esicelweni esiyinhloko se-HTTP, iwebhusayithi iba kancane, kuvela amaphutha angu-500, futhi umsebenzisi ugcina ebheke isikrini esingenalutho ngokuphelelwa yithemba.
Izindaba ezinhle ukuthi i-Laravel inikeza ingqalasizinda enamandla neguquguqukayo yokufaka umugqa ekuvumela ukuthi unikezele ukuphakamisa okunzima ezinqubweni zangemuva, ukukuphatha ngokuza kuqala, ukukuqoqa ngamaqembu, ukukuqapha, ukuzama kabusha uma kwehluleka, ngisho nokumisa okwesikhashana abasebenzi ukuze balungise. Ake sibheke ngokucophelela (futhi singashiyi lutho) ukuthi singazuza kanjani ngokugcwele kukho, okuhlanganisa nendlela yokumisa, ukuqhubeka, nokulawula ukuziphatha kwayo ekukhiqizeni.
Imiqondo eyisisekelo: ukuxhumana, imigqa, nabashayeli
Ku-Laravel, ngaphambi kokumisa noma yini, udinga ukuqonda umehluko phakathi ukuxhunywa kolayini kanye nolayini ngokwabo. e config/queue.php une-array connections lapho uchaza ingemuva ngalinye: database, redis, beanstalkd, sqs, sync, null, failover, rabbitmq (uma uyengeza), njll.
Ukuxhumana ngakunye kungaba nokumbalwa olayini abanengqondo (amagama afana default, emails, high, low, importsIsibaluli queue Ukuxhumana ngakunye kubonisa ukuthi yimuphi ulayini ozenzakalelayo lapho imisebenzi izoya khona uma kungekho omunye oshiwo. onQueue()Ngale ndlela ungenza izinto ezifana nalezi:
- Ulayini osheshayo ngama-imeyili noma ukuthengiselana okufushane.
- Okunye okubalulekile okuphansi ngemisebenzi emide njengokucubungula amavidiyo noma imibiko emikhulu.
- Imigqa ihlukaniswe ngohlobo lomsebenzi:
imports,notificaciones,reportes, Njll
Lapho uvula isisebenzi nge php artisan queue:workNgokuzenzakalelayo, ilalela ulayini oshiwo njengo okuzenzakalelayo kuxhumo olukhethiwe. Uma ufuna ukubeka phambili, ungadlula imigqa eminingi ehlukaniswe ngokhefana:
php artisan queue:work redis --queue=high,default,low
Ngale ndlela, isisebenzi siqala ngokusebenza okuphezulu kuqala , bese kuba okuzenzakalelayo , bese kuba low kuphela , okubalulekile uma uhlelo lulayishiwe futhi awufuni umbiko wemizuzu engama-30 wokuvimba ama-imeyili abaluleke kakhulu.
Abashayeli bomugqa kanye nezimfuneko
I-Laravel inikeza i-API ehlanganisiwe yabashayeli abaningana bomugqa , kodwa ngayinye inezici zayo ezithile kanye nokuncika kwayo. Ukukhetha umshayeli ofanele kubalulekile ngaphambi kokuxoxa ngokumisa abasebenzi.
Isizindalwazi somshayeli
Umshayeli database Igcina imisebenzi kuthebula le-SQL (imvamisa jobsKulula ukusetha futhi ilungele amaphrojekthi amancane noma izindawo zokuthuthukisa lapho ungafuni khona ukuganga nge-Redis noma i-SQS.
Izinyathelo eziyisisekelo:
- Khiqiza ukufuduka:
php artisan queue:table(noma ezinguqulweni ezintsha, iza njengecreate_jobs_tableokuzenzakalelayo). - Qalisa ukufuduka:
php artisan migrate. - Setha QUEUE_CONNECTION=isizindalwazi ku
.envfuthi uqinisekiseconfig/queue.phplokho'default' => env('QUEUE_CONNECTION','database').
Kulula futhi kuqinile ngokwanele, kodwa ngemigqa eminingi kanye nethrafikhi eningi kungaba yisithiyo , ngoba konke kuhamba ngesizindalwazi esifanayo sobudlelwano.
Umshayeli uRedis
I -Redis driver iyi-hard horse ejwayelekile ekukhiqizweni. Iyashesha, isekela izici ezithuthukisiwe (ukukhiya, ukukhawulela izinga, ukukhiya kwe-athomu, i-Horizon, njll.), futhi ikala kahle kakhulu.
Amaphuzu abalulekile:
- Udinga ukumisa uxhumano lwe-Redis ku
config/database.php. - Izinketho
serializerycompressionkusuka eRedis Azihambisani nomshayeli womugqa. - Uma usebenzisa I-Redis ClusterAmagama olayini kufanele abe ne-hash tag, isibonelo
{default}ukuze bonke okhiye abakulowo mugqa bawele endaweni efanayo. - Okukhethwa kukho
block_forIvumela isisebenzi ukuthi sivimbe ngenkathi silinde imisebenzi imizuzwana embalwa, esikhundleni sokuqhubeka sivota: yonga i-CPU futhi yehlisa imibuzo kuseva ye-Redis.
Isibonelo:
'redis' => ,
Uma ubeka block_for = 0Isisebenzi sihlala sivaliwe kuze kube yilapho umsebenzi usutholakala, into okufanele uyikhumbule uma ufuna ukuthi iphendule ngokushesha kumasiginali afana SIGTERM noma misa isikhashana imiyalo.
Abanye abashayeli: SQS, Beanstalkd, null, failover…
Ngaphezu kwezizindalwazi kanye nokuvuselela kabusha, i-Laravel isekela ezinye izinhlelo :
- I-Amazon SQSOlayini abaphethwe ku-AWS, ngosekelo lwe FIFOAmaqembu emilayezo, ukuphindaphinda, nezilungiselelo zokubonakala ezithuthukisiwe. Idinga i-SDK.
aws/aws-sdk-php. - I-BeanstalkdNgokushesha kakhulu futhi kulula, usebenzisa iphakheji
pda/pheanstalk. - ukuvumelanisa: yenza imisebenzi ngokushesha ngenqubo efanayo. Iwusizo ekuthuthukisweni noma ekuhlolweni, kodwa ekukhiqizeni kufana nokungasebenzisi nhlobo olayini.
- null: Ilahla imisebenzi ngokushesha nje lapho "ithunyelwa". Isetshenziselwa ukukhubaza ngokuphelele isistimu yomugqa.
- ukuhlulekaLokhu kukuvumela ukuthi ulungiselele ukuxhumana okuningi, futhi uma eyokuqala yehluleka, i-Laravel izama ukuphusha umsebenzi uye kokulandelayo ohlwini. Iphelele ezindaweni lapho i- ukutholakala okuphezulu kubalulekile.
Ezingeni lokumisa isikhashana nokuqalisa kabusha abasebenzi, i-logic iyafana cishe kungakhathaliseki ukuthi umshayeli ungubani, ngoba iphathwa kusukela kumiyalo ye-Artisan kanye nesigaba se -Worker , hhayi kusukela emuva komugqa.
Ukwakhiwa kwamathuba emisebenzi kanye nokuhlelwa kwemodeli
Un UJobe Ku-Laravel, kumane kuyikilasi elihlanganisa umsebenzi okufanele wenziwe kulayini. Ivamise ukukhiqizwa nge-Artisan futhi ilondolozwe kuyo app/Jobs.
Ukuze udale eyodwa:
php artisan make:job ProcessPodcast
Ikilasi elakhiwe amathuluzi ShouldQueue futhi ngokuvamile isebenzisa izici Dispatchable, InteractsWithQueue, Queueable y SerializesModelsInhliziyo isendleleni handle()okuyinto eyenziwa isisebenzi uma umsebenzi ufika.
Isici esinamandla kakhulu ukuhlelwa okuzenzakalelayo kwamamodeli e-Eloquent . Uma wamukela imodeli ku-Job constructor, i-Laravel ayifaki yonke into emgqeni, kodwa ifaka isihlonzi sayo kuphela. Lapho umsebenzi usucutshungulwa, yakha kabusha imodeli kusukela kudathabheyisi ngobudlelwano bayo obulayishiwe.
Isibonelo esijwayelekile (nge-pseudocode, ukugwema ukuyiphinda nezwi nezwi):
- Umakhi uthola I-podcast $podcast.
- Isici
SerializesModelsInesibopho sokulondoloza i-ID. - En
handle(AudioProcessor $processor)Wenza umsebenzi onzima (ukucubungula umsindo, isibonelo).
Uma ungafuni ukuthi ubudlelwano bemodeli buhlelwe (ukuze umthwalo okhokhelwayo ungabi mkhulu), ungasebenzisa $model->withoutRelations() noma ku-PHP 8 isibaluli # endaweni ekhushuliwe kamakhi.
Umjovo wokuncika endleleni yesibambo
Enye inzuzo ukuthi ungakwazi faka amasevisi ngqo endleleni yokubamba (njengokungathi isilawuli), ngoba i-Laravel iphinde isebenzisa isiqukathi sesevisi kokuthi Imisebenzi. Isibonelo, ungacela i-a AudioProcessorAmaklayenti e-HTTP, amakhosombe, njll., kanye nohlaka lunakekela ukuzixazulula.
Uma udinga ukulawula okuhle kakhulu kwalokho okubizwa nge- handleungasebenzisa Container::bindMethod() kumnikezeli wesevisi futhi uchaze i-logic yomjovo ngokwakho, kodwa ezimweni eziningi asikho isidingo sokwenza izinto zibe nzima kakhulu.
I-Job Middleware
Njengoba imizila ine-middleware, Imisebenzi nayo ingaba nayo i-middleware ethile ezisebenza ngaphambi nangemuva komsebenzi. Lokhu kunciphisa kakhulu ikhodi ephindaphindayo ezindleleni handle() futhi iwusizo ikakhulukazi ku-:
- Ukunciphisa isilinganiso nge Redis.
- Gwema ukweqa yemisebenzi ethinta insiza efanayo.
- Okuhlukile okuvamile kuma-API angazinzile.
- Ukweqa imisebenzi ngaphansi kwezimo ezithile (
Skipi-middleware).
I-Middleware ivamise ukufakwa ngaphakathi app/Jobs/Middleware futhi zibuyiselwa endleleni middleware() Kusuka kuJobe. Isibonelo somqondo:
public function middleware(): array { return ;
Izinhlobo ezikhethekile zemisebenzi: ehlukile, ebethelwe, futhi ikhiyiwe
I-Laravel ikuvumela ukuthi umake imisebenzi ethile njenge ehlukile ukuqinisekisa ukuthi azikho izimo ezimbili ezifanayo ezike zibe kulayini ngesikhathi esisodwa. Lokhu kufezwa ngokusebenzisa isikhombimsebenzisi ShouldBeUnique o ShouldBeUniqueUntilProcessingfuthi isekela ukuchaza ukhiye uniqueId() kanye nesikhathi uniqueFor.
Lokhu kulungele izinto ezifana nalezi:
- Bala kabusha inkomba yokusesha yomkhiqizo: kanye kuphela ngomkhiqizo ngamunye ize iqede.
- Ukuvumelanisa nezinsizakalo zangaphandle ezingakuvumeli izicelo ezisetshenziswa kanyekanye zesisetshenziswa esifanayo.
Ngaphansi, iLaravel isebenzisa a ukukhiya kwe-athomu yenqolobane (Redis, memcached, database, njll.). Ungaphinda ukhethe umshayeli wenqolobane waleyo khiya uniqueVia().
Ngaphezu kwalokho, kukhona interface ShouldBeEncrypted, obonisa ngayo ukuthi uJobe uphelele Faka ikhodi yakho ngaphambi kokufaka ulayiniIwusizo kakhulu lapho udlulisela idatha ebucayi futhi awufuni ukuthi ihambe ngombhalo ongenalutho nge-Redis, SQS noma isizindalwazi.
Thumela, bambezela, futhi wenze imisebenzi ngezindlela ezahlukene
Uma umsebenzi wakho usuchaziwe, uyethula nge Job::dispatch() kusukela kubalawuli, abalaleli bomcimbi, imiyalo ye-Artisan, noma ngisho nokuvalwa. Amapharamitha odlula kuwo dispatch Baqonde kumakhi kaJobe.
Izinhlobonhlobo ezithakazelisayo:
dispatchIf()ydispatchUnless()ukumisa ukuthunyelwa ngomugqa owodwa.delay()ukuze umsebenzi ungakwazi ukusetshenzwa kuze kufike usuku/isikhathi esithile.dispatchAfterResponse()oafterResponse()endispatch()Ukuvalwa, okuhlehlisa ukusebenza kuze kube yilapho impendulo ye-HTTP isithunyelwe, kodwa ngaphakathi kwenqubo efanayo ye-PHP.dispatchSync()ukuze uqalise Umsebenzi ngokuvumelanisa (ngaphandle kokudlula kulayini) kodwa uphinde usebenzise isigaba esifanayo.- Ukuxhumana okukhethekile njenge
deferredobackgroundukwenza ngemva kwempendulo, kunqubo efanayo noma kunqubo entsha ye-PHP.
Ekugcineni, ungacacisa ukuxhumana kanye nomugqa ngezindlela eziboshwe ngamaketanga onConnection() y onQueue(), noma ngabe ithumela noma ingaphakathi koMakhi womsebenzi.
Ukulawula okuhle: ukuzama futhi, ukuhlehlisa, ukuphela kwesikhathi, nokuphatha amaphutha
Ingxenye enkulu yokusebenza ngemigqa eLaravel ukunquma ukuthi uzozama kangaki umsebenzi , ukuthi uzolinda isikhathi esingakanani phakathi kwemizamo, nokuthi uzowubheka nini njengohlulekile.
Izinketho ezitholakalayo:
--triesenqueue:workukusetha inani eliphezulu lemizamo yayo yonke imisebenzi yaleso sisebenzi (ngaphandle uma umsebenzi uchaza owakhe)$triesotries()).$triesnoma indlelatries()esigabeni somsebenzi ngokulawula Umsebenzi ngamunye.retryUntil()ukuthi: “zama futhi njengoba ufuna kuze kube yilesi sikhathi, ngemva kwalokho, kwehlulekile.” Uma ihambisanatries, umyaloretryUntil.$maxExceptionsukunqamula lapho inkinga ingenxa yokushiyeka okungasingathwa okuphindaphindiwe.$timeouto--timeoutukukhombisa ukuthi uJobe angagijima imizuzwana emingaki ngaphambi kokuba isisebenzi sibulale inqubo yengane.$failOnTimeoutukumaka umsebenzi njengohlulekile uma kwenzeka ukuphela kwesikhathi.$backoffindlelabackoff()ukuchaza ukuthi uzolinda isikhathi esingakanani phakathi kokuzama futhi, ngisho namanani omchazi.
Uma umsebenzi uphonsa okuhlukile, uLaravel uzo... idedela futhi emsileni kuze kube yilapho imizamo emisiwe isiphelile. Ungakwazi ukulawula lokhu ngokwenza nge release($segundos) o fail($exception) lapho ufuna ukumaka ngamabomu umsebenzi njengohlulekile.
Imisebenzi ehlulekile, ithebula_lemisebenzi ehlulekile nokuthena
Lapho uJobe eqeda imizamo yakhe, uyacatshangelwa umsebenzi ohlulekile futhi uLaravel uwufaka etafuleni failed_jobs (noma ku-DynamoDB uma uyilungiselela ngaleyo ndlela). Lelo thebula ligcina i-UUID, uxhumano, ulayini, umthwalo wemisebenzi, kanye nokuhlukile okwaphonswa.
Imiyalo ewusizo:
php artisan queue:failedukubhala uhlu lwehlulekile.php artisan queue:retry <id|all>ukuze uzame futhi.php artisan queue:forget <id>ukususa eyodwa.php artisan queue:flushukususa konke (ngenketho yamahora ezinguqulweni ezintsha).php artisan queue:prune-failed --hours=48ukuthena amarekhodi amadala ngokuzenzakalelayo.
Emisebenzini ungachaza indlela failed(Throwable $exception) Ukuze uthole ukuhlanza okwengeziwe: yazisa umsebenzisi, buyisela izenzo ezingaphelele, bhala amalogi akhethekile, njll. Qaphela ukuthi isenzakalo esisha Somsebenzi senziwa ukuze kushayelwe ucingo. failed()Ngakho-ke, unganciki ezinguqukweni zezakhiwo ezenziwe ku handle().
Ukuhlanganisa imisebenzi: amaqoqo emisebenzi futhi uwahlanganise nezintambo
Uma udinga ukuqalisa amakhulu noma izinkulungwane zemisebenzi ehlobene (isibonelo, ukungenisa i-CSV enkulu ngezingcezu, ukucubungula amafayela ngamaqoqo, ukuhlanza idatha, njll.), kuyalulekwa ukusebenzisa ukusebenza kweqoqo likaLaravel .
Ukugeleza okuyisisekelo:
- dala itafula
job_batchesconphp artisan queue:batches-table && php artisan migrate. - Maka Imisebenzi ezoba yingxenye yamaqoqo anesici
Batchable. - Usar
Bus::batch()ukuthumela isethi Yemisebenzi, nama-callbacksthen,catchyfinally. - Finyelela inqwaba kusuka kumsebenzi ngamunye nge
$this->batch()futhi uhlole ukuthi ikhanseliwe yini. - Amathuba wokwengeza Imisebenzi eminingi eqoqweni eliqhubekayo nge
$this->batch()->add().
Ama-batch ahlangana kahle nama-chain : ungaba nama-chain ngaphakathi kwe-batch noma ama-batch njengezinto ze-chain enkulu. Lokhu kuwusizo kakhulu uma ufuna ama-chain amaningi asebenze "ngokufana" futhi aqalise okuthile lapho eseqedile.
Ukubulawa kwabasebenzi, okubalulekile, nokuthunyelwa
Yonke imilingo yolayini yenzeka ngoba unayo isisebenzi esisodwa noma ngaphezulu isebenzisa umyalo queue:work (o queue:listen(yize lena yokugcina ingasebenzi kahle). Lezi zinqubo zingamadayimoni asebenza isikhathi eside alalela imigqa yawo.
Izinketho eziyinhloko ze queue:work:
- Ukuxhumana:
php artisan queue:work redis,queue:work database, Njll - Colas:
--queue=high,default,lowukubeka phambili. - -ishumi nanye: icubungula umsebenzi owodwa bese iyaphuma.
- -imisebenzi eminingi: icubungula imisebenzi engu-X futhi inqamule (ukuqalisa kabusha abasebenzi ngezikhathi ezithile nokukhulula inkumbulo).
- -Isikhathi esiningi: izinqubo zamasekhondi angu-N bese uyaphuma.
- – lala: imizuzwana yokulinda lapho ingekho imisebenzi etholakalayo.
- -yima-uma-ingenalutho: ithulula ulayini futhi ivale ngokuhlanzekile (ilungele ezindaweni ze-Docker noma imisebenzi ephuma kanye).
- -isikhathi siphelile: imizuzwana yesikhathi sokuvala ngomsebenzi ngamunye, njengoba sishilo ngaphambili.
- -Basebenzi: ukucubungula imisebenzi noma ngabe uhlelo lokusebenza lukumodi yokulungisa.
Ngenxa yokuthi lezi zinqubo zisebenza isikhathi eside, ekukhiqizeni i -process monitor efana ne-Supervisor (ku-Linux) cishe isetshenziswa njalo ukuqala abasebenzi be-X, ukubaqala kabusha uma bephahlazeka, nokuphatha amalogi. Ibhulokhi yokucushwa kwe-Supervisor ejwayelekile ye-Laravel ichaza:
- umyalo ne
php artisan queue:work ...ukhonkolo. - izinombolo ukukhombisa ukuthi bangaki abasebenzi okufanele bethule ngokuhambisana.
- Izindlela zokungena, umsebenzisi, ukuqalisa kabusha okuzenzakalelayo, njll.
Ukumisa isikhashana nokuqalisa kabusha olayini e-Laravel
Ake sibheke ukuthi yini evame ukubaluleka ekulungiseni: indlela yokumisa abasebenzi abalinde ngaphandle kokubamisa ngokuzumayo futhi ngaphandle kokushiya imisebenzi ingaqedwanga. I-Laravel inikeza izindlela eziningana, ezinye ezintsha, ezinye zakudala, zokulawula lokhu.
Misa isikhashana: umugqa: misa kancane futhi uphazamise amasignali
Ezinguqulweni zakamuva, i-Laravel ingeza imiyalo ethile yokumisa okwesikhashana nokuqalisa kabusha ukwenziwa kwabasebenzi:
php artisan queue:pause: itshela isistimu ukuthi iyeke ukuthatha imisebenzi emisha, kodwa ivumele leyo esivele isaqhubeka iqede.php artisan queue:continue: iqala kabusha ukucubungula imisebenzi emisha lapho igcine khona.
Le miyalo isebenza ngokuthumela amasignali kubasebenzi ngokusebenzisa indlela yokugcina isikhashana esetshenziswa yiLaravel ngaphakathi. Yingakho kubalulekile ukuba nomshayeli we-cache olungiselelwe kahle (ofakwe i-memcached, ophinde wafakwa, isizindalwazi, ifayela, njll.) noma ngabe umugqa wakho we-cache wangempela ungenye into.
Okubalulekile: Ukumisa umugqa noma isisebenzi akukhanseli noma kususe imisebenzi esivele imisiwe ; kumane kuvimbela imisebenzi eminingi ukuthi isuswe emgqeni ngenkathi imisiwe iqhubeka.
Ukuvota kokuphazamiseka kanye nomthelela ekusebenzeni
Njalo uma isisebenzi siqeda umsebenzi, i-Laravel ihlola i-cache ukuze ithole izimpawu zokuqala kabusha, zokumisa okwesikhashana, noma zokuqhubeka . Lokhu kunezindleko ezincane, kodwa kukhona. Uma ugxile kakhulu ekusebenzeni futhi wazi ukuthi ngeke kudingeke ukuthi umise okwesikhashana noma uqale kabusha abasebenzi kusukela emiyalweni, ungakhubaza lokhu kuvota ngokubiza:
Queue::withoutInterruptionPolling();
Noma lungisa izici ezimile ze Illuminate\Queue\Worker ukukhubaza ukuthinta okuthile ($iyaqalwa kabusha, $okumisiweNokho, uma wenza lokhu bese uzama ukusebenzisa queue:pause o queue:restartabasebenzi Ngeke batholeKuyisinqumo sokuklama okufanele sicatshangelwe ngokucophelela.
Misa isikhashana ngesandla noSupervisor noma i-Docker
Ngaphezu kwemiyalo kaLaravel uqobo , ezindaweni zokukhiqiza, izinqubo zivame "ukumiswa" ngokungaqondile:
- Imisa uhlelo ku-Supervisor (
supervisorctl stop laravel-worker:*), ebulala noma evimba abasebenzi. - Ukusebenzisa -yima-uma-ingenalutho ekusetshenzisweni ukuvumela abasebenzi ukuthi baqedele okukulayini bese bevala.
- Ku-Docker, ivumela inqubo yesiqukathi nge
--stop-when-emptybese iyacisha.
Umehluko nge queue:pause Ngokumisa ngokuphelele izinqubo, uzoyeka ukucubungula imisebenzi kuze kube yilapho abasebenzi baqala kabusha. ukuphumula kwangaphakathi Ungagcina izinqubo enkumbulweni, ulinde umyalo continueLokhu kuwusizo ekusetshenzisweni kokubuyisela emuva ngokushesha noma izikhathi zokunakekela ezimfushane.
Ukwenziwa kwesizindalwazi kanye ne-after_commit
Iphutha elivamile: ukuthumela imisebenzi ngaphakathi kokuthengiselana kwedatha . Uma ungaqaphile, isisebenzi singase senze umsebenzi ngaphambi kokuba kwenziwe isivumelwano, futhi imodeli noma idatha oyilindele kungenzeka ingakabi khona kudathabheyisi.
Ukuze ugweme lo mdanso, unezinketho ezimbili:
- Yenza kusebenze
'after_commit' => trueekucushweni kokuxhumeka komugqa. Ngakho-ke, noma yimuphi Umsebenzi othunyelwe ngaphakathi kokuthengiselana uhlehliswa ngaphakathi kuze kube uqinisekiswa. - Sebenzisa izindlela zomsebenzi ngamunye
afterCommit()obeforeCommit()lapho uthumela, ukuphoqelela ukuziphatha kuphela emisebenzini ethile.
Uma ukuthengiselana kuguqulwa, imisebenzi ethunyelwe phakathi nakho iyalahlwa ngaphandle kokungena emgqeni, okuyikho kanye okufunwayo ukuze kulondolozwe ukuhambisana.
Ukuqapha, ukuhlanza ulayini, nokuhlola
Uma usunemigqa evulekile futhi isebenza kahle, akwanele ukumane ulahle imisebenzi bese ukhohlwa ngakho; kufanele uqaphe futhi uhlole ukuthi konke kuziphatha kanjani.
Amathuluzi nemiyalo ewusizo:
queue:clearukuthulula ulayini othize (SQS, Redis, database).queue:monitorukuqapha inani lemisebenzi kolayini abathile nokucupha umcimbiQueueBusyuma beqa umkhawulo.- Imicimbi Yemisebenzi njengoba
Queue::before,Queue::after,Queue::loopingyQueue::failingukuze uxhume ingqondo yangokwezifiso (amalogi, amamethrikhi, ukubuyisela emuva, njll.). - Umgunyathi ekuhlolweni usebenzisa
Queue::fake()yBus::fake()ukuze uqinisekise ukuthi Imisebenzi, izintambo noma amaqoqo zithunyelwe ngaphandle kokuzenza.
Ezivivinyweni ungasho izinto ezinjengokuthi “lo Msebenzi ubekwe emgqeni izikhathi ezingu-X” , “uchungechunge olunale Misebenzi luthunyelwe ngale ndlela” noma “akukho Msebenzi othize obekwe emgqeni”, okunikeza ukuphepha okuningi ekugelezeni okuyinkimbinkimbi.
Ngalo lonke uhlelo lwezemvelo—abashayeli abanjengoRedis noma i-SQS, imisebenzi eklanywe kahle, i-middleware yokulungisa kahle, amaqoqo, amaketanga, ukuzama kabusha ukucushwa, abasebenzi abaphethwe uSupervisor, nemiyalo efana queue:pause y queue:continue- I-Laravel ikuvumela ukuba uchwephese ekucubunguleni okungemuva kuze kufike ku-milimitha, kusukela ekuthumeleni i-imeyili evamile kuya ekwakhiweni komugqa osabalalisiwe ngokuhluleka, iqinisekisa ukuthi uhlelo lwakho lokusebenza luyaqhubeka nokuphendula ngokushesha kusendlalelo se-HTTP kuyilapho kwenziwa umsebenzi onzima ngaphansi ngaphandle kokuvimbela umsebenzisi.