Articles

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. Tha e comasach definish an loidsig na h-obrach anns a 'mhodh 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 modail iomlan agus na dàimhean luchdaichte aige 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 defichrìochnaich an clas de 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:

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.

Artaigilean co-cheangailte
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, tha e comasach defisònraich gu soilleir ceann-latha crìochnachaidh bloc 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

Leabhar-latha ùr-ghnàthachaidh
Na caill na naidheachdan as cudromaiche mu ùr-ghnàthachadh. Clàraich gus am faighinn air post-d.

Leugh Ùr-ghnàthachadh sa chànan agad

Leabhar-latha ùr-ghnàthachaidh
Na caill na naidheachdan as cudromaiche mu ùr-ghnàthachadh. Clàraich gus am faighinn air post-d.

Lean dhuinn