Instalimi i Beanstalk
Shembull i projektit
Punë dërgimi dhe drejtimi
Konfigurimi i Mbikëqyrësit
konkluzioni
Beanstalk është një radhë pune e shpejtë dhe e thjeshtë. Kjo ju lejon të ekzekutoni detyrat që kërkojnë kohë në mënyrë asinkrone, të tilla si dërgimi i emaileve, lidhja me API-të e jashtme ose përpunimi i imazheve. Duke vepruar kështu, ju do të zvogëloni vonesën e aplikacionit tuaj të internetit. Laravel ofron mbështetje jashtë kutisë për beanstalkd.
Në këtë tutorial ne do të instalojmë beanstalkd, konfigurojmë një aplikacion demo Laravel dhe do të menaxhojmë punëtorët e radhës përmes Supervisor . Aplikacioni demo do të marrë një listë të OS-ve të disponueshme nga Vultr API dhe do të zgjedhë rastësisht një.
Supozohet se ju tashmë keni të instaluar Supervisor në sistemin tuaj. Nëse nuk e bëni këtë, duhet të lexoni udhëzuesin e mëposhtëm se si të konfiguroni Supervisor: Instalimi dhe konfigurimi i Mbikëqyrësit në Ubuntu 16.04
Supozohet gjithashtu se ju keni akses SSH në shembullin tuaj Vultr.
Instalimi i Beanstalk
Hapi i parë për të ndërmarrë është instalimi beanstalkd.
sudo apt-get update
sudo apt-get install beanstalkd
Filloni shërbimin.
sudo systemctl start beanstalkd
Ju gjithashtu mund të aktivizoni shërbimin që të fillojë me inicializimin e sistemit.
sudo systemctl enable beanstalkd
Kontrolloni statusin e shërbimit duke lëshuar komandën e mëposhtme.
sudo systemctl status beanstalkd
Si parazgjedhje, beanstalkddëgjon në port 11300. Beanstalk përdor një protokoll të thjeshtë të bazuar në tekst të përshkruar në depon e tij github . Mund ta testoni protokollin e tij duke ekzekutuar telnet.
telnet localhost 11300
Shkruani sa vijon dhe goditni ENTER.
list-tubes
Ju duhet të shihni një listë të tubave të disponueshëm në server:
OK 14
---
- default
Për të mbyllur lidhjen thjesht shkruani quitdhe më pas shtypni ENTER.
Tubat në Beanstalk përfaqësojnë radhët e punës. Beanstalk është i përbërë kryesisht nga prodhuesit , konsumatorët , punët dhe tubacionet . Prodhuesit vendosin punë në një tub për t'u konsumuar (përpunuar) nga çdo numër konsumatorësh. Vini re se si prodhuesit ashtu edhe konsumatorët janë thjesht klientë të serverit Beanstalk dhe janë krejtësisht të pavarur nga njëri-tjetri. Në terma praktike kjo do të thotë që duke përdorur Beanstalk ju mund të prodhoni punët tuaja në aplikacionin tuaj PHP dhe ta përpunoni atë në një aplikacion NodeJS për shembull. Për fat të mirë, Laravel i përmbledh të gjitha këto dhe na ofron një API shumë të thjeshtë për të dërguar dhe trajtuar punët, siç do ta shohim më pas.
Shembull i projektit
Për të ndërtuar projektin tonë të mostrës, së pari duhet të instalojmë varësitë e tij. Ne do të instalojmë PHP dhe Composer.
sudo apt-get install php php-mbstring php-xml php-common php-zip composer
Tani, krijoni projektin bazuar në Laravel 5.5.
composer create-project --prefer-dist laravel/laravel vultr "5.5.*"
Më pas cdnë dosjen e krijuar së fundmi. Ne do të punojmë në këtë drejtori tani e tutje. Kjo dosje mund të referohet më vonë si PROJECT_ROOT.
cd vultr/
Për të përdorur Beanstalk në Laravel, duhet të instalojmë një varësi tjetër, klientin PHP Beanstalk.
composer require pda/pheanstalk ~3.0
Ne gjithashtu duhet të krijojmë një përfaqësi pune. Në Laravel, kjo është një klasë brenda app/Jobsdosjes. Laravel ka një komandë konsole për të na ndihmuar të krijojmë një klasë pune. Le të krijojmë Punën tonë shembull.
php artisan make:job FindFavoriteOS
Përditësoni app/Jobs/FindFavoriteOS.phpskedarin në vijim.
<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Support\Facades\Log;
class FindFavoriteOS implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
$rawData = file_get_contents('https://api.vultr.com/v1/os/list');
$list = json_decode($rawData, true);
shuffle($list);
$key = array_rand($list);
$favorite = $list[$key];
Log::info('My Favorite OS is: ' . $favorite['name']);
}
}
Metoda e dorezës është ajo që do të ekzekutohet në mënyrë efektive kur puna të konsumohet. Këtu, ne marrim të dhëna nga Vultr API, zgjedhim rastësisht një OS dhe shkruajmë OS-në e zgjedhur në skedarin e regjistrit. Skedari i regjistrit ndodhet në storage/logs/laravel.log.
Ne kemi instaluar tashmë Beanstalk dhe kemi përcaktuar punën që do të ekzekutohet prej tij. Tani është koha për t'i thënë Laravel që të përdorë Beanstalk si radhën e paracaktuar të punës. Kopjoni .envskedarin e paracaktuar të ofruar nga instalimi i Laravel.
cp .env.example .env
Tani hapni .envskedarin dhe përditësoni linjën ku është specifikuar drejtuesi i radhës.
QUEUE_DRIVER=beanstalkd
Më në fund, gjeneroni një çelës aplikacioni.
php artisan key:generate
Tani jemi gati të dërgojmë punë në radhën e punës Beanstalk.
Punë dërgimi dhe drejtimi
Dërgimi i një pune në Laravel është mjaft i thjeshtë. Përditëso routes/web.phpskedarin.
<?php
Route::get('/', function () {
for ($i = 0; $i < 50; $i++) {
\App\Jobs\FindFavoriteOS::dispatch();
}
return '50 Jobs dispatched!';
});
Pavarësisht se nuk rekomandohet për të ekzekutuar serverin e integruar të ofruar në prodhim, ne do ta përdorim atë këtu për hir të shkurtësisë.
php artisan serve --host 0.0.0.0 --port 8000
Tani në një shfletues uebi, lundroni te http://[vultr-instance-ip]:8000. Do të shihni mesazhin e mëposhtëm.
50 Jobs dispatched!
Hapni një lidhje të re SSH me serverin tuaj dhe brenda rrënjës së projektit tonë, ekzekutoni sa më poshtë.
php artisan queue:work --once
Ky është rezultati i pritur:
[2018-02-14 00:03:52] Processing: App\Jobs\FindFavoriteOS
[2018-02-14 00:03:53] Processed: App\Jobs\FindFavoriteOS
Konfirmoni që regjistri është krijuar.
cat storage/logs/laravel.log
Konfigurimi i Mbikëqyrësit
Për të shmangur nevojën për të përpunuar manualisht radhën, ne do të përdorim supervisord. Krijoni konfigurimin e mëposhtëm të programit në /etc/supervisor/conf.d/vultr.conf.
[program:vultr]
process_name=%(program_name)s_%(process_num)02d
command=php [PROJECT_ROOT]/artisan queue:work
autostart=true
autorestart=true
numprocs=8
redirect_stderr=true
stdout_logfile=/var/log/worker.log
Vini re se rruga e duhur për të vendosur skedarin e konfigurimit të Mbikëqyrësit do të varet nga konfigurimi juaj. Gjithashtu, mos harroni të zëvendësoni [PROJECT_ROOT]me shtegun e plotë për PROJECT_ROOTnë sistemin tuaj.
Këtu ne po konfigurojmë Supervisorin që të fillojë automatikisht përpunimin e radhës dhe, në rast të prishjes së skriptit, ta rifillojë atë. Gjithashtu vini re se ne nuk jemi duke instancuar një punëtor të vetëm, por 8 procese. Ju jeni të lirë të instantoni sado procese që ju i gjeni të nevojshme në varësi të aplikimit tuaj.
Për të lejuar mbikëqyrësin të menaxhojë punonjësin tonë, detyrojeni atë të rilexojë konfigurimin e tij.
sudo supervisorctl reread
sudo supervisorctl update
Nëse shërbimi i Mbikëqyrësit nuk është nisur, shumë ju duhet ta filloni atë.
sudo systemctl start supervisord
Tani le të shohim nëse punët janë duke u përpunuar.
tail -f storage/logs/laravel.log
Në një shfletues uebi, lundroni te http://[vultr-instance-ip]:8000. Do të shihni regjistrat që krijohen në tastierën tuaj.
konkluzioni
Ne kemi konfiguruar me sukses një aplikacion Laravel për të përdorur Beanstalk si një radhë pune. Gjithashtu, ne demonstruam se si të përdorim Supervisor për të menaxhuar punëtorët.