Kako koristiti poslove i upravljati redovima u Laravel 11

Laravel 11 framework ima niz funkcija i alata za razvoj čistog i naprednog softvera, uključujući Laravel Queue
Le red omogućavaju nam da organiziramo dugotrajne zadatke, kao što je slanje e-pošte ili generiranje izvještaja, za obradu u pozadini, oslobađajući vašu aplikaciju za obradu drugih zahtjeva.
U ovom članku govorimo o tome kako postaviti i koristiti Laravel redove, zajedno s nekim primjerima koji će ilustrirati njihovu praktičnu upotrebu.
Predviđeno vrijeme čitanja: 5 minute
Konfiguriranje drajvera za red čekanja
Laravel podržava nekoliko drajvera za red čekanja, uključujući Redis
, Amazon SQS
e Beanstalkd
. Možete odabrati odgovarajući drajver za vašu aplikaciju na osnovu vaših specifičnih zahtjeva i okruženja.
Da konfigurišete drajver za red čekanja, idite na datoteku .env
u korijenskom direktoriju vaše Laravel aplikacije i postavite varijablu QUEUE_CONNECTION
na drajveru koji želite da koristite:
QUEUE_CONNECTION=redis
Kreiranje klase Job
Zatim ćete morati kreirati klasu Job
koji predstavlja zadatak koji želite obraditi. The Job
klase proširenjem interfejsa Illuminate\Contracts\Queue\ShouldQueue
, što označava da se posao može dodati u red čekanja.
Na primjer, napravimo posao koji šalje e-poštu korisniku:
php artisan make:job SendEmailJob
Ovo će stvoriti novu radnu klasu u direktoriju app/Jobs
. U metodi možete definirati logiku posla handle
:
imenski prostor App\Jobs;
koristite App\Models\Podcast;
koristiti App\Services\AudioProcessor;
koristite Illuminate\Bus\Queueable;
koristite Illuminate\Contracts\Queue\ShouldQueue;
koristite Illuminate\Foundation\Bus\Dispatchable;
koristite Illuminate\Queue\InteractsWithQueue;
koristite Illuminate\Queue\SerializesModels;
klasa SendEmailJob implementira ShouldQueue
{
koristiti Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
zaštićeni $user;
/ **
* Kreirajte novu instancu posla.
*/
javna funkcija __construct(Korisnik $user)
{
$this->user = $user;
}
/ **
* Izvršite posao.
*/
ručka javne funkcije()
{
Mail::to($this->user->email)->send(new \App\Mail\WelcomeEmail($this->user));
}
}
U ovom primjeru možemo vidjeti da prolazimo a Elokventan model direktno u konstruktoru Job
in queue
. Hvala za SerializesModels
koristi Job
, modeli Eloquent
i povezane učitane relacije će biti serijalizovane tokom obrade Job
.
To znači da ako je Job
u redu prihvata model Elokventan u svom konstruktoru, samo identifikator modela će biti serijalizovan u queue
. Kada je job
se zapravo upravlja, sistem queue
će automatski dohvatiti kompletnu instancu modela i njegove odnose učitane iz baza podataka. Ovaj pristup serijalizaciji modela omogućava slanje payload
di job
mnogo manji od vozačevog queue
.
Pošaljite posao u Laravel red
Nakon definiranja klase job
, možemo poslati na queue
koristeći metodu dispatch
. Na primjer, hajde da uradimo dispatch
del Job SendEmailJob
, pružajući objekat $user
kao parametar:
$user = Korisnik::find(1);
dispatch(novi SendEmailJob($user));
Alternativno, možemo koristiti metodu dispatchNow
da odmah pokrenete posao bez dodavanja u red čekanja:
dispatch_now(novi SendEmailJob($user));
Postoje različite metode ili uslovi za slanje posla, da biste saznali više o upotrebi ovih metoda, preporučujem da pročitate dokumentaciju Laravel 11 klikom ovdje. Konkretno:
- Slanje je odgođeno
- Pošaljite nakon odgovora pretraživača
- Sinhrona otprema
- Poslovi i DB tranzicije
- Povezivanje posla
- Obrada grešaka
Proces of queue
od Laravel
Za obradu job
in queue
, morat ćete započeti a worker
della queue
. Za ovo Laravel daje naredbu php artisan queue:work
, koji obavlja a worker
koji neprestano dovodi u pitanje queue
i obrađuje job
kako postanu dostupni.
php artisan queue:work
Također možete odrediti naziv queue
i broj radničkih niti koje koriste opcije --queuee
--tries
:
php artisan queue:work --queue=emails --tries=3
A će biti izvedeno worker
koji obrađuje job
dalla queue
emails
i ponovite neuspjele poslove do tri puta.
Monitor
della queue
Možete pratiti status job
u redu čekanja koristeći paket Laravel Horizon
, koji pruža kontrolnu tablu koja prikazuje informacije o worker
in queue
, na job
i dalje job
neuspješno.
Za instalaciju i konfiguraciju Laravel Horizon
, pokrenite sljedeću naredbu:
composer zahtijeva laravel/horizon
Upravljanje poslom se preklapa
Laravel uključuje srednji softver koji pomaže u izbjegavanju preklapanja poslova: Illuminate\Queue\Middleware\WithoutOverlapping
. Na primjer, pretpostavimo da posao u redu mijenja resurs koji bi trebao biti modificiran isključivo.
Na primjer kredit, stanje itd.... To jest, informacije koje kada se ažuriraju, ne mogu se istovremeno ažurirati drugim procesima.
Da bismo to učinili, možemo vratiti metodu WithoutOverlapping
iz metode posla middleware
:
use Illuminate\Queue\Middleware\WithoutOverlapping;
/**
* Get the middleware the job should pass through.
*
* @return array<int, object>
*/
public function middleware(): array
{
return [new WithoutOverlapping($this->user->id)];
}
Svi poslovi koji se preklapaju istog tipa bit će pušteni natrag u red čekanja. Također možete odrediti broj sekundi koji mora proći prije nego se izvrši novi pokušaj pokretanja oslobođenog posla:
public function middleware(): array
{
return [(new WithoutOverlapping($this->order->id))->releaseAfter(60)];
}
Ako želite odmah izbrisati sve poslove koji se preklapaju kako se ne bi ponovo pokušali, možete koristiti metodu dontRelease
:
public function middleware(): array
{
return [(new WithoutOverlapping($this->order->id))->dontRelease()];
}
Middleware WithoutOverlapping
pokreće ga Laravel-ova karakteristika atomskog bloka. Ponekad posao može neočekivano propasti ili isteći tako da se zaključavanje ne otpusti. Stoga možete eksplicitno definirati datum isteka zaključavanja koristeći metodu expireAfter
. Na primjer, sljedeći primjer će uputiti Laravel da otpusti zaključavanje WithoutOverlapping
tri minute nakon početka obrade posla:
public function middleware(): array
{
return [(new WithoutOverlapping($this->order->id))->expireAfter(180)];
}
Le queue Laravel oni pružaju moćan način za rukovanje dugotrajnim zadacima u pozadini, omogućavajući vašoj aplikaciji da efikasno obrađuje druge zahtjeve. Prateći korake opisane u ovom članku, možete jednostavno postaviti i koristiti Laravel redovi u vašoj prijavi. Sa mogućnošću praćenja i upravljanja redom koristeći Laravel Horizon, možete osigurati da vaša aplikacija radi glatko i efikasno. Koristeći Laravel redovi, možete pružiti bolje korisničko iskustvo svojim klijentima i poboljšati ukupne performanse vaše aplikacije.
Related Readings
Ercole Palmeri