Alapvetően 3 opciónk van a Queue-k megvalósítására. A sima adatbázis driver, Redis és Horizon.
Adatbázis driver
Ehhez a driverhez kell két darab extra tábla az adatbázisba. A jobs és a failed jobs. php artisan queue:table
és php artisan queue:failed-table
parancsokkal könnyen létre tudjuk hozni a migrációs fájlokat.
Illetve kelleni fog egy parancs, a Console kernel schedule metódusába is.
$schedule->command('queue:work --stop-when-empty')->everyMinute()->runInBackground()->withoutOverlapping();
Ez a parancs minden percben munkára fogja a queue-t és lefutattja a jobs táblában lévő feladatokat, majd ha kész van mindegyik akkor megáll.
Az .env fáljba pedig a következőt kell írni:
QUEUE_CONNECTION=database
Ennek a drivernek az előnye, hogy látjuk mi történik a job-okkal az adatbázisban, látjuk hogy hányszor próbálta újra futtatni, ha elhal akkor a failed jobs táblába azt is látjuk. Egy paranccsal könnyen vissza tudjuk tenni, hogy újra megpróbálja. Hátránya pedig az, hogy az átfutási idő mindig ~1 perc körül van.
Redis driver
A redisnek a legnagyobb előnye talán az hogy minden feladat egyből és azonnal lefut. Hátránya viszont, hogy semmit nem tudunk arról mi történik vele. Azt sem ha elhal, azt sem ha jól lefut és azt se tudjuk hogy fut-e.
Így ezt nagyon nem ajánlom használni.
Itt jön a képbe a Laravel Horizon package, ami egy arany középutat kinál, minimális kompromisszummokkal.
Horizon
A Horizon grafikus felülete lehetővé teszi, hogy könnyedén figyelemmel kísérjük a queue állapotát, illetve beállítsuk a feladat feldolgozási paramétereket.
Az alapvető működési elve a Horizon-nak, hogy a Laravel queue-ból (amely akár az alapértelmezett Redis queue is lehet) kikeresi a feladatokat, majd azokat elosztja a konfigurációban megadott mennyiségű munkafolyamat között. Ezek a munkafolyamatok a queue-ban lévő feladatokat végrehajtják, majd jelentik a Horizon-nak az eredményt. Ha egy feladat nem sikerült, akkor a Horizon újra megpróbálja futtatni azt a konfigurációban megadott számú próbálkozásig.
A Horizon előnyei közé tartozik, hogy nagyon könnyen használható, a queue felügyelete pedig grafikus felületen keresztül lehetséges, így a fejlesztők számára sokkal egyszerűbbé válik a kezelése. A Horizon azonban nem csak a queue kezelésére használható, hanem lehetővé teszi a folyamatos visszajelzést is a feladatok állapotáról. A Horizon ugyanis egy részletes feladat-összefoglalót is készít, amely a Queue állapotát, az elvégzett feladatokat, azokat a feladatokat, amelyeket nem sikerült végrehajtani, valamint a munkafolyamatok állapotát is tartalmazza.
Parancsok
php artisan horizon
futattás (lokálisan és a supervisor által is)php artisan horizon:pause
szüneteltetésphp artisan horizon:continue
folytatásphp artisan horizon:status
aktív-ephp artisan horizon:terminate
leállítás teljesen (supervisor tesztre és deploy-ra kell)
Előnyök-hátrányok
Adatbázis driver
- Előnye:
- Van jobs és failed_jobs tábla
- Látjuk mi történik a job-okkal, miért áll vagy miért hal el
- Hátránya:
- Kell hozzá egy schedule parancs
- Az átfutási idő átlagosan egy perc, mert minden percbe fut csak a parancs
Redis driver
- Előnyei:
- Azonnal és egyből lefut ahogy jön egy job
- Hátránya:
- Nem tudjuk mi történik a job-okkal
- Nem tudjuk miért halnak el
- Nem tudjuk, hogy fut-e
Horizon
- Előnye:
- Redis driver valójában, azonnal lefut minden
- Látjuk mi történik a Jjb-okkal
- Statisztika
- Load balancing
- Admin dashboard
- Hátránya:
- Supervisor
Mi az a supervisor?
Supervisor egy nyílt forráskódú alkalmazás, amely egy Linux operációs rendszeren futtatható folyamatfelügyelő szolgáltatás. A Supervisor lehetővé teszi, hogy felügyeljük a futó folyamatokat, például a webalkalmazásokat, a szerveroldali alkalmazásokat, a cron munkákat és a Queue-kat.
A Supervisor által felügyelt folyamatokat konfigurációs fájlokban állítjuk be. Ezek a fájlok tartalmazzák az adott folyamat elérési útját, a futtatási parancsot, a log fájl helyét, valamint az esetleges környezeti változókat.
A Supervisor számos előnnyel rendelkezik, többek között lehetővé teszi a folyamatok automatikus újraindítását, az elérhetőség figyelemmel kísérését, a hibajelzések továbbítását, valamint a folyamatok egyszerű kezelését és telepítését. A Supervisor emellett biztonságosabbá is teszi a folyamatok kezelését, mivel nem engedi, hogy a felhasználók közvetlenül elindítsanak vagy leállítsanak folyamatokat a rendszeren.