Beanstalk telepítése
Mintaprojekt
Feladási és lebonyolítási munkák
Felügyelő konfigurálása
Következtetés
A Beanstalk egy gyors és egyszerű munkasor. Lehetővé teszi időigényes feladatok aszinkron futtatását, például e-mailek küldését, külső API-khoz való csatlakozást vagy képek feldolgozását. Ezzel csökkenti a webalkalmazások várakozási idejét. A Laravel azonnali támogatást biztosít a következőhöz: beanstalkd.
Ebben az oktatóanyagban telepítünk beanstalkd, beállítunk egy demó Laravel alkalmazást, és kezeljük a sormunkásokat a Supervisoron keresztül . A demóalkalmazás megkapja a Vultr API- ból elérhető operációs rendszerek listáját, és véletlenszerűen kiválaszt egyet.
Feltételezzük, hogy a Supervisor már telepítve van a rendszerén. Ha nem, olvassa el a következő oktatóanyagot a Supervisor beállításáról: A Supervisor telepítése és konfigurálása az Ubuntu 16.04 rendszeren
Azt is feltételezzük, hogy rendelkezik SSH-hozzáféréssel a Vultr-példányhoz.
Beanstalk telepítése
Az első lépés a telepítés beanstalkd.
sudo apt-get update
sudo apt-get install beanstalkd
Indítsa el a szolgáltatást.
sudo systemctl start beanstalkd
Azt is engedélyezheti, hogy a szolgáltatás elinduljon a rendszer inicializálása után.
sudo systemctl enable beanstalkd
Ellenőrizze a szolgáltatás állapotát a következő parancs kiadásával.
sudo systemctl status beanstalkd
Alapértelmezés szerint beanstalkda porton figyel 11300. A Beanstalk egy egyszerű szövegalapú protokollt használ, amelyet a github tárolójában ismertetnek . A protokoll futtatásával tesztelheti a protokollt telnet.
telnet localhost 11300
Írja be a következőket, és nyomja meg a gombot ENTER.
list-tubes
Látnia kell a szerveren elérhető csövek listáját:
OK 14
---
- default
A kapcsolat bezárásához egyszerűen írja be quit, majd nyomja meg a gombot ENTER.
A Beanstalk csövek munkasorokat jelentenek. A babszem alapvetően termelőkből , fogyasztókból , munkahelyekből és csövekből áll . A termelők egy csőbe helyezik a munkahelyeket, amelyeket tetszőleges számú fogyasztó elfogyaszt (feldolgozhat). Vegye figyelembe, hogy mind a gyártók, mind a fogyasztók egyszerűen a Beanstalk szerver ügyfelei, és teljesen függetlenek egymástól. Gyakorlatilag ez azt jelenti, hogy a Beanstalk használatával elkészítheti a feladatait a PHP alkalmazásban, és feldolgozhatja azokat például egy NodeJS alkalmazásban. Szerencsére a Laravel mindezt elvonatkoztatja, és egy nagyon egyszerű API-t biztosít számunkra a feladatok feladásához és kezeléséhez, amint azt a továbbiakban látni fogjuk.
Mintaprojekt
Mintaprojektünk felépítéséhez először telepítenünk kell a függőségeit. Telepíteni fogjuk a PHP-t és a Composert.
sudo apt-get install php php-mbstring php-xml php-common php-zip composer
Most hozza létre a projektet a Laravel 5.5 alapján.
composer create-project --prefer-dist laravel/laravel vultr "5.5.*"
Tovább cda nemrég létrehozott mappába. Ezentúl ebben a könyvtárban fogunk dolgozni. Erre a mappára később mint PROJECT_ROOT.
cd vultr/
A Beanstalk használatához a Laravelben még egy függőséget kell telepítenünk, a PHP Beanstalk klienst.
composer require pda/pheanstalk ~3.0
Létre kell hoznunk egy Munkaképviseletet is. A Laravelben ez egy osztály a app/Jobsmappán belül . A Laravelnek van egy konzolparancsa, amely segít nekünk egy Job osztály létrehozásában. Hozzuk létre a mintamunkánkat.
php artisan make:job FindFavoriteOS
Frissítse a app/Jobs/FindFavoriteOS.phpfájlt a következőre.
<?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']);
}
}
A kezelési módszer az, ami hatékonyan végrehajtódik, amikor a feladat elfogy. Itt lekérjük az adatokat a Vultr API-ból, véletlenszerűen kiválasztunk egy operációs rendszert, és beírjuk a kiválasztott operációs rendszert a naplófájlba. A naplófájl a következő helyen található: storage/logs/laravel.log.
Már telepítettük a Beanstalk-ot, és meghatároztuk az általa végrehajtandó feladatot. Itt az ideje, hogy megmondjuk a Laravelnek, hogy a Beanstalk-ot használja alapértelmezett munkasorként. Másolja a .envLaravel telepítés által biztosított alapértelmezett fájlt.
cp .env.example .env
Most nyissa meg a .envfájlt, és frissítse azt a sort, ahol a sorillesztő van megadva.
QUEUE_DRIVER=beanstalkd
Végül generáljon egy alkalmazáskulcsot.
php artisan key:generate
Most már készen állunk a feladatok elküldésére a Beanstalk munkasorba.
Feladási és lebonyolítási munkák
Az állás feladása Laravelben meglehetősen egyszerű. Frissítse a routes/web.phpfájlt.
<?php
Route::get('/', function () {
for ($i = 0; $i < 50; $i++) {
\App\Jobs\FindFavoriteOS::dispatch();
}
return '50 Jobs dispatched!';
});
Annak ellenére, hogy nem ajánlott a beépített szerver éles futtatása, a rövidség kedvéért itt fogjuk használni.
php artisan serve --host 0.0.0.0 --port 8000
Most egy webböngészőben keresse meg a következőt: http://[vultr-instance-ip]:8000. A következő üzenetet fogja látni.
50 Jobs dispatched!
Nyisson meg egy új SSH-kapcsolatot a szerverével, és a projektünk gyökérjében hajtsa végre a következőket.
php artisan queue:work --once
Ez a várt kimenet:
[2018-02-14 00:03:52] Processing: App\Jobs\FindFavoriteOS
[2018-02-14 00:03:53] Processed: App\Jobs\FindFavoriteOS
Erősítse meg, hogy a napló létrejött.
cat storage/logs/laravel.log
Felügyelő konfigurálása
Ahhoz, hogy ne kelljen manuálisan feldolgozni a sorban fogjuk használni supervisord. Hozza létre a következő programkonfigurációt a /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
Figyelje meg, hogy a Supervisor konfigurációs fájl elhelyezésének megfelelő elérési útja a beállítástól függ. Ne felejtse el lecserélni [PROJECT_ROOT]a teljes elérési utat PROJECT_ROOTa rendszeren.
Itt beállítjuk a Supervisor-t, hogy automatikusan elkezdje feldolgozni a sort, és a szkript megszakadása esetén újraindítsa azt. Azt is vegye figyelembe, hogy nem egyetlen dolgozót, hanem 8 folyamatot példányosítunk. Ön szabadon példányosíthat, bármennyi folyamatot szükségesnek talál az alkalmazásától függően.
Ahhoz, hogy a Felügyelő kezelhesse a dolgozónkat, kényszerítse a konfiguráció újraolvasására.
sudo supervisorctl reread
sudo supervisorctl update
Ha a Supervisor szolgáltatás még nem indult el, sokaknak el kell indítania.
sudo systemctl start supervisord
Most nézzük meg, hogy a munkák feldolgozása folyamatban van-e.
tail -f storage/logs/laravel.log
Egy webböngészőben keresse meg a következőt: http://[vultr-instance-ip]:8000. Látni fogja a naplókat a konzolon.
Következtetés
Sikeresen konfiguráltunk egy Laravel alkalmazást, hogy a Beanstalk-ot munkasorként használja. Azt is bemutattuk, hogyan használható a Supervisor a dolgozók menedzselésére.