Mar a chleachdas tu obraichean agus mar a stiùireas tu ciudha ann an Laravel 11

Tha grunn fheartan agus innealan aig frèam Laravel 11 airson a bhith a’ leasachadh bathar-bog glan agus adhartach, a’ gabhail a-steach Ciudha Laravel
Le Ciudha leigidh iad leinn gnìomhan a bheir ùine a chuir air dòigh, leithid post-d a chuir no aithisgean a ghineadh, a phròiseasadh air a’ chùl, a’ saoradh an tagraidh agad gus iarrtasan eile a làimhseachadh.
San artaigil seo bruidhnidh sinn mu mar a chuireas tu air dòigh agus a chleachdas tu ciudha Laravel, còmhla ri eisimpleirean gus an cleachdadh practaigeach a nochdadh.
Ùine leughaidh tuairmseach: 5 minuti
A rèiteachadh an ciudha driver
Bidh Laravel a’ toirt taic do ghrunn dhraibhearan ciudha, nam measg Redis
, Amazon SQS
e Beanstalkd
. Faodaidh tu an draibhear iomchaidh a thaghadh airson an tagradh agad stèidhichte air na riatanasan agus an àrainneachd sònraichte agad.
Gus an draibhear ciudha a rèiteachadh, rachaibh chun fhaidhle .env
ann an eòlaire freumh an tagraidh Laravel agad agus suidhich an caochladair QUEUE_CONNECTION
air an dràibhear a tha thu airson a chleachdadh:
QUEUE_CONNECTION=ath-dhuais
A 'cruthachadh a' chlas Job
An ath rud, feumaidh tu clas a chruthachadh Job
a tha a’ riochdachadh na h-obrach a tha thu airson a phròiseasadh. Tha an Job
clasaichean le bhith a 'leudachadh an eadar-aghaidh Illuminate\Contracts\Queue\ShouldQueue
, a tha a’ nochdadh gum faodar an obair a chur ris a’ chiudha.
Mar eisimpleir, cruthaichidh sinn obair a chuireas post-d gu neach-cleachdaidh:
neach-ciùird php: obair SendEmailJob
Cruthaichidh seo clas-obrach ùr san eòlaire app/Jobs
. Faodaidh tu loidsig na h-obrach a mhìneachadh san dòigh handle
:
<?php
namespace App\Obraichean;
cleachd App\Models\Podcast;
cleachd App\Services\AudioProcessor;
cleachd Illuminate\Bus\Queable;
cleachd Illuminate\Contracts\Queue\ShouldQueue;
cleachd Illuminate \ Foundation \ Bus \ Dispatchable;
cleachd Illuminate\Queue\InteractsWithQueue;
cleachd Illuminate\Queue\SerializesModels;
clas SendEmailJob a’ cur an gnìomh ShouldQueue
{
cleachd Modalan Dispatchable, InteractsWithQueue, Queueable, Serializes;
dìon $user;
/ **
* Cruthaich eisimpleir obrach ùr.
*/
gnìomh poblach __construct(Cleachdaiche $user)
{
$this->user = $user;
}
/ **
* Cuir an gnìomh an obair.
*/
làimhseachadh gnìomh poblach ()
{
Post :: gu ($this-> cleachdaiche-> post-dealain) -> cuir (ùr \ App\Mail\WelcomeEmail($this->user));
}
}
Anns an eisimpleir seo, chì sinn gun tèid sinn seachad air a Modail eloquent gu dìreach ann an neach-togail an Job
in queue
. Taing dha SerializesModels
air a chleachdadh le Job
, na modailean Eloquent
agus thèid na dàimhean luchdaichte co-cheangailte riutha a chuir a-steach rè obrachadh an Job
.
Tha seo a’ ciallachadh ma tha an Job
anns a 'chiudha a' gabhail ri modail Eloquent anns an neach-togail aige, cha tèid ach an aithnichear modail a chuir a-steach don queue
. Nuair a bhios an job
dha-rìribh air a riaghladh, siostam de queue
gheibh e air ais gu fèin-ghluasadach an eisimpleir làn mhodail agus na dàimhean air an luchdachadh bhon stòr-dàta. Leigidh an dòigh-obrach seo airson sreathachadh mhodail dhut a chuir payload
di job
mòran nas lugha na an dràibhear queue
.
Cuir an Job gu ciudha Laravel
Às deidh clas a mhìneachadh job
, faodaidh sinn a chuir gu queue
a’ cleachdadh an dòigh-obrach dispatch
. Mar eisimpleir, dèanamaid an dispatch
del Job SendEmailJob
, a 'toirt seachad an nì $user
mar paramadair:
$user = Cleachdaiche:: lorg(1);
cur (SendEmailJob ùr($user));
Air neo, faodaidh sinn an dòigh-obrach a chleachdadh dispatchNow
gus an obair a ruith sa bhad gun a bhith ga chur ris a’ chiudha:
dispatch_now(SendEmailJob ùr($user));
Tha diofar dhòighean no chumhachan ann airson Iob a chuir air falbh, gus barrachd ionnsachadh mu chleachdadh nan dòighean sin, tha mi a’ moladh gun leugh thu na sgrìobhainnean Laravel 11 le bhith a’ briogadh an seo. Gu sònraichte:
- Tha dàil air a chuir air falbh
- Cuir às deidh freagairt brabhsair
- Tionndadh sioncronaich
- Obraichean agus gluasadan DB
- Slabhraidh obraichean
- Làimhseachadh mearachd
Pròiseas de queue
de Laravel
Gus an làimhseachadh job
in queue
, feumaidh tu tòiseachadh a worker
della queue
. Gus seo a dhèanamh bheir Laravel an àithne php artisan queue:work
, a tha a' coileanadh a worker
a tha an-còmhnaidh a’ ceasnachadh nan queue
agus a’ pròiseasadh an job
mar a bhios iad rim faighinn.
ciudha neach-ciùird php: obair
Faodaidh tu cuideachd ainm an fhaidhle a shònrachadh queue
agus an àireamh de snàithlean luchd-obrach a 'cleachdadh roghainnean --queuee
--tries
:
ciudha neach-ciùird php:work --queue = puist-d --tries =3
Thèid A a choileanadh worker
a tha a’ pròiseasadh an job
dalla queue
emails
agus feuch air ais obraichean a dh'fhàillig suas ri trì tursan.
Monitor
della queue
'S urrainn dhut sùil a chumail air an staid job
ciudha a’ cleachdadh a’ phacaid Laravel Horizon
, a bheir seachad deas-bhòrd a sheallas fiosrachadh mu dheidhinn worker
in queue
, air job
agus air adhart job
neo-shoirbheachail.
Gus a stàladh agus a rèiteachadh Laravel Horizon
, ruith an òrdugh a leanas:
Feumaidh an tè a rinn an t-òran laravel / horizon
Riaghladh thairis air obraichean
Tha Laravel a’ toirt a-steach bathar meadhanach a chuidicheas le bhith a’ seachnadh tar-tharraing Job: Illuminate\Queue\Middleware\WithoutOverlapping
. Mar eisimpleir, is dòcha gu bheil obair ciudha ag atharrachadh goireas a bu chòir atharrachadh a-mhàin.
Mar eisimpleir creideas, cothromachadh msaa… . Is e sin, fiosrachadh nach urrainnear ùrachadh aig an aon àm le pròiseasan eile nuair a thèid ùrachadh.
Gus seo a dhèanamh, is urrainn dhuinn am modh a thilleadh WithoutOverlapping
bhon dòigh-obrach 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)];
}
Thèid obraichean sam bith den aon sheòrsa a tha an lùib a chèile a leigeil ma sgaoil air ais dhan chiudha. Faodaidh tu cuideachd an àireamh de dhiogan a dh'fheumas a dhol seachad a shònrachadh mus feuch thu ris an obair a chaidh fhoillseachadh a-rithist:
public function middleware(): array
{
return [(new WithoutOverlapping($this->order->id))->releaseAfter(60)];
}
Ma tha thu airson cuir às sa bhad obraichean thar-tharraingeach gus nach tèid an toirt air ais, faodaidh tu am modh a chleachdadh dontRelease
:
public function middleware(): array
{
return [(new WithoutOverlapping($this->order->id))->dontRelease()];
}
Am bathar meadhanach WithoutOverlapping
tha e air a stiùireadh le feart bloc atamach Laravel. Aig amannan, faodaidh an obair fàiligeadh gun dùil no tighinn gu crìch gus nach tèid a’ ghlas a leigeil ma sgaoil. Mar sin, faodaidh tu ceann-latha crìochnachaidh glasaidh a mhìneachadh gu soilleir a’ cleachdadh an dòigh expireAfter
. Mar eisimpleir, bheir an eisimpleir a leanas stiùireadh do Laravel an glas a leigeil ma sgaoil WithoutOverlapping
trì mionaidean às deidh don obair tòiseachadh a’ giullachd:
public function middleware(): array
{
return [(new WithoutOverlapping($this->order->id))->expireAfter(180)];
}
Le ciudha Laravel bidh iad a’ toirt seachad dòigh chumhachdach air gnìomhan a bhios a’ caitheamh ùine air a’ chùl a làimhseachadh, a’ leigeil leis an tagradh agad iarrtasan eile a làimhseachadh gu h-èifeachdach. Le bhith a’ leantainn nan ceumannan a tha air am mìneachadh san artaigil seo, is urrainn dhut gu furasta am faidhle a stèidheachadh agus a chleachdadh Ciudha Laravel anns an tagradh agad. Le comas sùil a chumail air agus a 'stiùireadh a' chiudha a 'cleachdadh Laravel Horizon, faodaidh tu dèanamh cinnteach gu bheil an tagradh agad a’ ruith gu rèidh agus gu h-èifeachdach. A 'cleachdadh an Ciudha Laravel, faodaidh tu eòlas cleachdaiche nas fheàrr a thoirt don luchd-ceannach agad agus coileanadh iomlan an tagraidh agad a leasachadh.
Leughaidhean Co-cheangailte
Ercole Palmeri