- Laravel tarjoaa yhtenäisen jono-API:n, jossa on useita ajureita (tietokanta, Redis, SQS…) ja yhteyksien ja loogisten jonojen erottelu.
- Työt mahdollistavat raskaiden tehtävien siirtämisen taustalle, ja ne tukevat mallien sarjoittamista, väliohjelmistoja, kertaluonteisia töitä, salausta, eriä ja merkkijonoja.
- Työntekijöitä hallitaan queue:work- ja Supervisor-komennoilla sekä komennoilla, kuten queue:pause/queue:continue, jotka ohjaavat uudelleenyrityksiä, aikakatkaisuja ja prioriteetteja.
- Jonojen luotettavuutta tuotannossa takaa täydellinen ekosysteemi virheille, valvonnalle ja testaukselle (failed_jobs, queue:retry, queue:monitor, Queue::fake).
Jonojen kanssa työskentely Laravelissa on lähes välttämätöntä kaikissa edes vähän vakavissaan olevissa projekteissa: sähköpostien lähettämisessä, CSV-tiedostojen käsittelyssä, PDF-tiedostojen luomisessa, kuvien koon muuttamisessa, ulkoisten API-rajapintojen kutsumisessa… Jos kaikki tämä tehdään pääasiallisessa HTTP-pyynnössä, verkkosivusto hidastuu, ilmenee 500 virhettä ja käyttäjä päätyy tuijottamaan epätoivoisesti tyhjää näyttöä.
Hyvä uutinen on, että Laravel tarjoaa tehokkaan ja joustavan jonotusinfrastruktuurin , jonka avulla voit delegoida raskaan työn taustaprosesseille, hallita niitä prioriteetin mukaan, ryhmitellä niitä eriin, valvoa niitä, yrittää uudelleen epäonnistuessaan ja jopa keskeyttää työntekijöitä tilapäisesti huoltoa varten. Katsotaanpa tarkemmin (ja älkäämme jättäkö mitään pois), miten saat siitä kaiken irti, mukaan lukien miten voit keskeyttää, jatkaa ja hallita sen toimintaa tuotannossa.
Peruskäsitteet: yhteydet, jonot ja ajurit
Laravelissa, ennen kuin pysäytät mitään, sinun on ymmärrettävä ero seuraavien välillä: jonoyhteydet ja itse jonot. sisään config/queue.php sinulla on taulukko connections jossa määrittelet jokaisen taustajärjestelmän: tietokanta, redis, beanstalkd, sqs, synkronointi, null, vikasietoisuus, rabbitmq (jos lisäät sen) jne.
Jokaisella yhteydellä voi olla useita loogiset jonot (nimet kuten default, emails, high, low, importsOminaisuus queue Jokainen yhteys osoittaa, mikä on oletusjono, johon työt menevät, jos muuta ei ole määritetty. onQueue()Tällä tavoin voit tehdä esimerkiksi seuraavia asioita:
- Nopea jono sähköposteja tai lyhyitä maksutapahtumia varten.
- Toinen matala prioriteetti pitkiin tehtäviin, kuten videoiden tai suurten raporttien käsittelyyn.
- Jonot segmentoituna tehtävätyypin mukaan:
imports,notificaciones,reportes, Jne
Kun käynnistät työntekijän php artisan queue:workOletusarvoisesti se kuuntelee jonoa, joka on määritetty seuraavasti: oletuksena valitulla yhteydellä. Jos haluat priorisoida, voit välittää useita pilkulla erotettuja jonoja:
php artisan queue:work redis --queue=high,default,low
Tällä tavoin työntekijä käsittelee ensin high-arvon , sitten default-arvon ja vasta sitten low-arvon , mikä on ratkaisevan tärkeää järjestelmän latauksen aikana etkä halua 30 minuutin raportin estävän korkean prioriteetin sähköposteja.
Jonoajurit ja edellytykset
Laravel tarjoaa yhtenäisen API:n useille jonoajureille , mutta jokaisella on omat erityispiirteensä ja riippuvuutensa. Oikean ajurin valitseminen on ratkaisevan tärkeää ennen kuin keskustelemme työntekijöiden tauottamisesta.
Kuljettajatietokanta
Kuski tietokanta Se tallentaa työt SQL-taulukkoon (yleensä jobsSe on helppo asentaa ja täydellinen pieniin projekteihin tai kehitysympäristöihin, joissa et halua sählätä Redisin tai SQS:n kanssa.
Perusvaiheet:
- Luo migraatio:
php artisan queue:table(tai uudemmissa versioissa se tulee muodossacreate_jobs_tableoletus). - Suorita siirrot:
php artisan migrate. - konfigurointi QUEUE_CONNECTION=tietokanta sisään
.envja vahvistaconfig/queue.phpettä'default' => env('QUEUE_CONNECTION','database').
Se on kätevä ja riittävän vankka, mutta monien jonojen ja suuren liikenteen vuoksi siitä voi tulla pullonkaula , koska kaikki kulkee saman relaatiotietokannan kautta.
Redis-ohjain
Redis -ajuri on tuotantoympäristöjen vakiotyöjuhta. Se on nopea, tukee edistyneitä ominaisuuksia (lukitus, nopeudenrajoitus, atomilukot, Horizon jne.) ja skaalautuu erittäin hyvin.
Tärkeitä kohtia:
- Sinun on määritettävä Redis-yhteys kohdassa
config/database.php. - Vaihtoehdot
serializerycompressionRedisiltä Ne eivät ole yhteensopivia jonokuljettajan kanssa. - Jos käytät Redis-klusteriJonojen nimissä on oltava hash-tunniste, esimerkiksi
{default}niin, että kaikki jonossa olevat avaimet osuvat samaan paikkaan. - Vaihtoehto
block_forSe antaa työntekijälle mahdollisuuden estää odottaessaan töitä muutaman sekunnin ajan jatkuvan kyselyn sijaan: säästää prosessoria ja vähentää Redis-palvelimelle tehtäviä kyselyitä.
Esimerkiksi:
'redis' => ,
Jos laitat lohko_kohteelle = 0Työntekijä pysyy estettynä toistaiseksi, kunnes työpaikka tulee saataville. Tämä on hyvä pitää mielessä, jos haluat sen reagoivan nopeasti signaaleihin, kuten SIGTERM tai taukokomentoja.
Muut ajurit: SQS, Beanstalkd, null, vikasietoinen…
Tietokantojen ja redis-järjestelmien lisäksi Laravel tukee myös muita järjestelmiä :
- Amazonin SQSHallitut jonot AWS:ssä, tuki seuraaville: FIFOViestiryhmät, deduplikaatio ja näkyvyyden lisäasetukset. Vaatii SDK:n.
aws/aws-sdk-php. - PavunvarsiErittäin nopea ja helppo käyttää pakettia
pda/pheanstalk. - synkronoida: suorittaa tehtävät välittömästi samassa prosessissa. Hyödyllinen kehityksessä tai testauksessa, mutta tuotannossa se on käytännössä sama kuin jonoja ei käytettäisi ollenkaan.
- nolla: Hylkää työt heti, kun ne on "lähetetty". Käytetään jonotusjärjestelmän täydelliseen poistamiseen käytöstä.
- vikasietoisuusNäin voit määrittää useita yhteyksiä, ja jos ensisijainen yhteyksien muodostaminen epäonnistuu, Laravel yrittää siirtää työn listan seuraavalle yhteydelle. Täydellinen ympäristöihin, joissa korkea saatavuus Se on kriittinen.
Työprosessien keskeyttämisen ja jatkamisen tasolla logiikka on käytännössä sama ajurista riippumatta, koska sitä hallitaan Artisan-komennoilla ja Worker- luokalla , ei jonon taustajärjestelmästä.
Työn luominen ja mallin sarjoittaminen
Un Job Laravelissa se on yksinkertaisesti luokka, joka kapseloi jonossa suoritettavan tehtävän. Se luodaan tyypillisesti Artisanilla ja tallennetaan app/Jobs.
Luodaksesi sellaisen:
php artisan make:job ProcessPodcast
Luotu luokka työvälineet ShouldQueue ja yleensä käyttää piirteitä Dispatchable, InteractsWithQueue, Queueable y SerializesModelsSydän on menetelmässä handle()mikä on se, mitä työntekijä tekee työpaikan saapuessa.
Erityisen tehokas ominaisuus on Eloquent-mallien automaattinen serialisointi . Jos hyväksyt mallin Job-konstruktorissa, Laravel ei lisää koko objektia jonoon, vaan ainoastaan sen tunnisteen. Kun työ käsitellään, se rekonstruoi mallin tietokannasta ladattuine suhteineen.
Tyypillinen esimerkki (pseudokoodina, jotta sitä ei tarvitse toistaa sanatarkasti):
- Rakentaja vastaanottaa Podcast $podcast.
- Ominaisuus
SerializesModelsSe on vastuussa tunnuksen tallentamisesta. - En
handle(AudioProcessor $processor)Sinä teet raskaan työn (esimerkiksi äänen käsittelyn).
Jos et halua mallin suhteiden sarjoittavan (jotta hyötykuorma ei ole valtava), voit käyttää $model->withoutRelations() tai PHP 8:ssa attribuutti # rakentajan mainostamalla kiinteistöllä.
Riippuvuusinjektio kahvametodiin
Toinen etu on, että voit injektoi palvelut suoraan kahvametodiin (ikään kuin se olisi ohjain), koska Laravel käyttää myös palvelusäiliötä Jobsissa. Voit esimerkiksi pyytää AudioProcessorHTTP-asiakasohjelmat, tietovarastot jne., ja kehys huolehtii niiden ratkaisemisesta.
Jos tarvitset erittäin tarkkaa hallintaa ns. handlevoit käyttää Container::bindMethod() palveluntarjoajassa ja määrittää injektiologiikan itse, mutta useimmissa tapauksissa asioita ei tarvitse monimutkaistaa niin paljon.
Työn väliohjelmisto
Aivan kuten reiteillä on väliohjelmistoja, myös töillä voi olla tietty väliohjelmisto jotka suoritetaan ennen työtä ja sen jälkeen. Tämä vähentää huomattavasti toistuvaa koodia metodeissa handle() ja se on erityisen hyödyllinen seuraaville:
- Nopeuden rajoittaminen Redisin kanssa.
- välttää päällekkäin teoksia, jotka käsittelevät samaa lähdettä.
- Säännölliset poikkeukset epävakaille API-rajapinnoille.
- Töiden ohittaminen tietyissä olosuhteissa (
Skipväliohjelmisto).
Väliohjelmisto sijoitetaan yleensä app/Jobs/Middleware ja palautetaan metodista middleware() Jobin kirjasta. Käsitteellinen esimerkki:
public function middleware(): array { return ;
Erikoistyyppiset työt: yksilölliset, salatut ja lukitut
Laravelin avulla voit merkitä tiettyjä töitä ainutlaatuinen varmistaakseen, ettei kahta identtistä instanssia ole koskaan jonossa samaan aikaan. Tämä saavutetaan toteuttamalla rajapinta ShouldBeUnique o ShouldBeUniqueUntilProcessingja tukee avaimen määrittelyä uniqueId() ja aika uniqueFor.
Tämä on ihanteellinen esimerkiksi seuraaviin asioihin:
- Laske tuotteen hakuindeksi uudelleen: vain kerran tuotetta kohden kunnes se loppuu.
- Synkronoinnit ulkoisten palveluiden kanssa, jotka eivät salli samanaikaisia pyyntöjä samalle resurssille.
Laravel käyttää alla atomilukko välimuistista (Redis, memcached, tietokanta jne.). Voit myös valita kyseisen lukon välimuistiajurin uniqueVia().
Lisäksi on käyttöliittymä ShouldBeEncrypted, jolla osoitat, että koko työ on Syötä koodisi ennen jonoon menoaErittäin hyödyllinen arkaluonteisten tietojen välittämisessä, etkä halua niiden kulkevan selkotekstinä Redisin, SQS:n tai tietokannan kautta.
Lähetä, viivytä ja suorita töitä eri tiloissa
Kun työtehtäväsi on määritelty, käynnistät sen Job::dispatch() ohjaimista, tapahtumakuuntelijoista, Artisan-komennoista tai jopa sulkemisista. Parametrit, jotka välität dispatch Ne menevät suoraan Jobin rakentajan luo.
Mielenkiintoisia variaatioita:
dispatchIf()ydispatchUnless()käsitellä lähetys yhdellä linjalla.delay()jotta työtä ei voida käsitellä ennen tiettyä päivämäärää/kellonaikaa.dispatchAfterResponse()oafterResponse()endispatch()Sulkemiset, jotka lykkäävät suoritusta, kunnes HTTP-vastaus on lähetetty, mutta saman PHP-prosessin sisällä.dispatchSync()suorittaa Job-tehtävän synkronisesti (ilman jonoa) mutta käyttämällä samaa luokkaa uudelleen.- Erikoisliitokset, kuten
deferredobackgroundsuoritettavaksi vastauksen jälkeen, samassa prosessissa tai uudessa PHP-prosessissa.
Lopuksi voit määrittää yhteyden ja jonon ketjutetuilla metodeilla onConnection() y onQueue()joko lähetyksen yhteydessä tai työtehtävien luontityökalussa.
Hienosäätö: uudelleenyritykset, peruutukset, aikakatkaisut ja virheiden käsittely
Suuri osa jonojen kanssa työskentelystä Laravelissa on sen päättäminen , kuinka monta kertaa työtä yritetään uudelleen , kuinka kauan odotetaan yritysten välillä ja milloin sitä pidetään epäonnistuneena.
Saatavilla olevat vaihtoehdot:
--triesenqueue:workasettaaksesi kyseisen työntekijän kaikkien töiden enimmäisyritysten määrän (ellei työ määrittele omaa)$triesotries()).$triestai menetelmätries()Job-luokassa Job-kohtaista hallintaa varten.retryUntil()sanoa: "Yritä uudelleen niin paljon kuin haluat tähän asti, sen jälkeen se on epäonnistuminen." Jos se osuu yksiintries, komentoretryUntil.$maxExceptionskatkaista, kun ongelma johtuu toistuvista käsittelemättömistä poikkeuksista.$timeouto--timeoutosoittamaan, kuinka monta sekuntia Job voi suorittaa ennen kuin worker tappaa lapsiprosessin.$failOnTimeoutmerkitäksesi työn epäonnistuneeksi aikakatkaisun sattuessa.$backoffmenetelmäbackoff()määrittää, kuinka kauan odotetaan uudelleenyritysten välillä, jopa eksponentiaalisilla arvoilla.
Jos työ heittää havaitsemattoman poikkeuksen, Laravel... vapautuu takaisin pyrstöön kunnes määritetyt yritykset on käytetty loppuun. Voit hallita tätä manuaalisesti release($segundos) o fail($exception) kun haluat tarkoituksella merkitä työn epäonnistuneeksi.
Epäonnistuneet työt, failed_jobs-taulukko ja karsinta
Kun Job uupuu yrityksensä, häntä aletaan pitää epäonnistunut työ ja Laravel lisää sen taulukkoon failed_jobs (tai DynamoDB:ssä, jos konfiguroit sen sillä tavalla). Tämä taulukko tallentaa UUID:n, yhteyden, jonon, työn kuorman ja heitetyn poikkeuksen.
Hyödyllisiä komentoja:
php artisan queue:failedlistaamaan epäonnistuneita.php artisan queue:retry <id|all>kokeilemaan niitä uudelleen.php artisan queue:forget <id>poistaaksesi yhden.php artisan queue:flushpoistaaksesi kaikki (uudemmissa versioissa on myös tuntikohtainen vaihtoehto).php artisan queue:prune-failed --hours=48karsimaan vanhoja tietueita automaattisesti.
Jobs-osiossa voit määritellä metodin failed(Throwable $exception) Lisäpuhdistusta varten: ilmoita käyttäjälle, peruuta osittaisia toimintoja, kirjoita erikoislokeja jne. Huomaa, että Job-funktiosta luodaan uusi instanssi kutsua varten failed()Älä siis luota tehtyihin kiinteistömuutoksiin handle().
Työerätyö: työerät ja niiden yhdistäminen merkkijonoihin
Kun sinun on käynnistettävä satoja tai tuhansia toisiinsa liittyviä töitä (esimerkiksi jättimäisen CSV- tiedoston tuonti paloina, tiedostojen käsittely erissä, datan puhdistaminen jne.), on suositeltavaa käyttää Laravelin eräajotoimintoa.
Perusvirtaus:
- Luo taulukko
job_batcheskanssaphp artisan queue:batches-table && php artisan migrate. - Merkitse eriin liitettävät työt ominaisuudella
Batchable. - käyttö
Bus::batch()lähettää joukko työtehtäviä takaisinkutsuineenthen,catchyfinally. - Käytä erää kustakin työstä kohdasta
$this->batch()ja tarkista, onko se peruttu. - Mahdollisuus lisätä töitä meneillään olevaan erään
$this->batch()->add().
Erät integroituvat kauniisti ketjuihin : ketjuja voi olla erän sisällä tai eriä voi olla osa suurempaa ketjua. Tämä on erityisen hyödyllistä silloin, kun haluat useiden ketjujen toimivan "rinnakkain" ja käynnistävän jonkin toiminnon, kun ne kaikki ovat valmistuneet.
Työntekijöiden suoritus, prioriteetit ja käyttöönotto
Jonojen kaikki taika syntyy, koska sinulla on yksi tai useampi työntekijä komennon suorittaminen queue:work (o queue:listen(vaikka jälkimmäinen onkin vähemmän tehokas). Nämä prosessit ovat pitkäkestoisia daemoniprosesseja, jotka kuuntelevat omia jonojaan.
Keskeiset vaihtoehdot queue:work:
- Liitäntä:
php artisan queue:work redis,queue:work database, Jne - Jonot:
--queue=high,default,lowpriorisoida. - -yksitoista: käsittelee yhden työn ja lopettaa.
- –max-jobs: käsittelee X työtä ja lopettaa prosessin (käynnistääkseen työtehtäviä säännöllisesti uudelleen ja vapauttaakseen muistia).
- –max-aika: prosessoi N sekuntia ja sulkeutuu sitten.
- -nukkua: sekunteja odotusta, kun töitä ei ole saatavilla.
- –pysähdy-kun-tyhjä: tyhjentää jonon ja sulkeutuu siististi (ihanteellinen Docker-ympäristöissä tai kertaluonteisissa töissä).
- –aikakatkaisu: aikakatkaisun sekuntia työtä kohden, kuten aiemmin mainitsimme.
- -pakottaa: töiden käsittelyyn, vaikka sovellus olisi ylläpitotilassa.
Koska nämä prosessit ovat pitkäkestoisia, tuotannossa käytetään lähes aina prosessien valvontatyökalua , kuten Supervisoria (Linuxissa), X-työprosessien käynnistämiseen, niiden uudelleenkäynnistämiseen kaatumisen sattuessa ja lokien hallintaan. Tyypillinen Supervisorin määrityslohko Laravelille määrittelee:
- komento kanssa
php artisan queue:work ...betoni. - numprocs osoittamaan, kuinka monta työntekijää käynnistetään rinnakkain.
- Lokipolut, käyttäjä, automaattiset uudelleenkäynnistykset jne.
Jonojen keskeyttäminen ja jatkaminen Laravelissa
Siirrytäänpä siihen, mikä on usein tärkeää ylläpidossa: miten jonossa olevat työntekijät voidaan pysäyttää pysäyttämättä heitä äkillisesti ja jättämättä töitä kesken. Laravel tarjoaa useita mekanismeja, osa uudempia, osa klassisia, tämän hallitsemiseksi.
Tauko: jono: tauko- ja keskeytyssignaalit
Laravelin uusimmissa versioissa on lisätty erityisiä komentoja työntekijöiden suorittamisen keskeyttämiseksi ja jatkamiseksi :
php artisan queue:pause: käskee järjestelmää lopettamaan uusien töiden ottamisen, mutta antamaan käynnissä olevien töiden valmistua.php artisan queue:continue: jatkaa uusien töiden käsittelyä siitä, mihin se jäi.
Nämä komennot toimivat lähettämällä signaaleja työprosesseille Laravelin sisäisesti käyttämän välimuistimekanismin kautta. Siksi on tärkeää, että välimuistiajuri (esim. memcached, redis) on määritetty oikein, vaikka varsinainen välimuistijonosi olisikin jotain muuta.
Tärkeää: Jonon tai työntekijän keskeyttäminen ei peruuta tai poista jo jonossa olevia töitä ; se yksinkertaisesti estää uusien töiden poistamisen jonosta tauon aikana.
Häiriöiden ja niiden suorituskykyyn kohdistuvien vaikutusten kysely
Joka kerta, kun työntekijä suorittaa työn loppuun, Laravel tarkistaa välimuistista uudelleenkäynnistys-, tauko- tai jatkamissignaalit . Tällä on mitättömät kustannukset, mutta se on olemassa. Jos olet erittäin keskittynyt suorituskykyyn ja tiedät, ettei sinun tarvitse keskeyttää tai käynnistää työntekijöitä uudelleen komennoilla, voit poistaa tämän kyselyn käytöstä kutsumalla:
Queue::withoutInterruptionPolling();
Tai jopa säätää staattisia ominaisuuksia Illuminate\Queue\Worker poistaaksesi tiettyjä kosketusnäyttöjä ($uudelleenkäynnistettävä, $keskeytettäväJos kuitenkin teet tämän ja yrität sitten käyttää queue:pause o queue:restarttyöntekijät He eivät saa tietääSe on suunnittelupäätös, jota kannattaa harkita tarkkaan.
Manuaalinen tauko Supervisorin tai Dockerin avulla
Laravelin omien komentojen lisäksi tuotantoympäristöissä prosessit usein "pysäytetään" epäsuorasti:
- Ohjelman pysäyttäminen Supervisorissa (
supervisorctl stop laravel-worker:*), joka tappaa tai pysäyttää työntekijät. - käyttämällä –pysähdy-kun-tyhjä käyttöönotoissa, jotta työntekijät voivat viimeistellä jonossa olevat tehtävät ja sitten lopettaa toiminnan.
- Dockerissa säilön käsittelyn salliminen
--stop-when-emptyja sitten se sammuu.
Ero queue:pause Pysäyttämällä prosessit kokonaan pysäytät töiden käsittelyn, kunnes työntekijät käynnistyvät uudelleen. sisäinen tauko Voit pitää prosessit muistissa odottamassa komentoa continueTämä on hyödyllistä nopeissa palautuskäyttöönotoissa tai lyhyissä ylläpitojaksoissa.
Tietokannan tapahtumat ja after_commit
Klassinen virhe: töiden lähettäminen tietokantatapahtumien sisällä . Jos et ole varovainen, työntekijä saattaa suorittaa työn ennen commitin tekemistä, eikä odottamaasi mallia tai dataa välttämättä vielä ole tietokannassa.
Tämän tanssin välttämiseksi sinulla on kaksi vaihtoehtoa:
- Aktivoida
'after_commit' => truejonoyhteyden kokoonpanossa. Näin ollen kaikki tapahtuman sisällä lähetetyt työt lykätään sisäisesti, kunnes ne vahvistetaan. - Käytä työkohtaisia menetelmiä
afterCommit()obeforeCommit()lähetyksen aikana, jotta toiminta pakotetaan vain tietyissä töissä.
Jos tapahtuma peruutetaan, sen aikana lähetetyt työt hylätään ilman , että ne koskaan siirtyvät jonoon, mikä on juuri se, mitä yleensä halutaan johdonmukaisuuden säilyttämiseksi.
Valvonta, jonojen puhdistus ja testaus
Kun jonot ovat tosissaan toiminnassa, ei riitä, että vain heittää Jobsin pois ja unohtaa koko homman; sinun tulisi seurata ja testata, miten kaikki toimii.
Hyödyllisiä työkaluja ja komentoja:
queue:cleartietyn jonon tyhjentämiseksi (SQS, Redis, tietokanta).queue:monitorseurata tiettyjen jonojen töiden määrää ja laukaista tapahtumaQueueBusyjos ne ylittävät tietyn kynnyksen.- Työtapahtumat kuten
Queue::before,Queue::after,Queue::loopingyQueue::failingmukautetun logiikan (lokit, mittarit, palautukset jne.) kytkemiseen. - Väärennökset testeissä käyttäen
Queue::fake()yBus::fake()varmistaakseen, että työt, merkkijonot tai erät on lähetetty ilman, että niitä tosiasiallisesti suoritetaan.
Testeissä voit todeta esimerkiksi ”tämä työ on ollut jonossa X kertaa” , ”ketju, jossa nämä työt on lähetetty tässä järjestyksessä” tai ”mitään tiettyä työtä ei ole ollut jonossa”, mikä tarjoaa paljon turvallisuutta monimutkaisissa virroissa.
Koko tämän ekosysteemin avulla – ajurit, kuten Redis tai SQS, hyvin suunnitellut työt, hienosäätöä varten tarkoitetut väliohjelmistot, erät, ketjut, uudelleenyritysten konfigurointi, esimiehen hallinnoimat työntekijät ja komennot, kuten queue:pause y queue:continue— Laravelin avulla hallitset taustaprosessoinnin millimetrin tarkkuudella aina tyypillisestä sähköpostin lähettämisestä hajautettuihin jonoarkkitehtuureihin vikasietoisuuden avulla varmistaen, että sovelluksesi reagoi nopeasti HTTP-tasolla samalla, kun raskasta työtä tehdään sen alla, estämättä käyttäjää.