Háttér állások tavasszal a JobRunrral

1. Áttekintés

Ebben az oktatóanyagban megvizsgáljuk az elosztott háttérfeladatok ütemezését és feldolgozását a Java-ban a JobRunr segítségével, és integráljuk a Spring-be.

2. A JobRunr-ról

A JobRunr egy olyan könyvtár, amelyet beágyazhatunk alkalmazásunkba, és amely lehetővé teszi számunkra a háttérfeladatok ütemezését egy Java 8 lambda használatával. A tavaszi szolgáltatásaink bármelyik meglévő módszerét felhasználhatjuk munkahelyek létrehozására anélkül, hogy interfészt kellene telepíteni. A munka lehet rövid vagy hosszan tartó folyamat, és automatikusan letölti egy háttérszálra, így az aktuális webkérés nem lesz blokkolva.

Munkájának elvégzéséhez a JobRunr elemzi a Java 8 lambdát. JSON néven sorosítja, és vagy relációs adatbázisba, vagy NoSQL adattárba tárolja.

3. JobRunr funkciók

Ha azt látjuk, hogy túl sok háttérmunkát állítunk elő, és a szerverünk nem képes megbirkózni a terheléssel, könnyen megtehetjük vízszintesen méretezhet az alkalmazás további példányainak hozzáadásával. A JobRunr automatikusan megosztja a terhelést, és az összes munkát elosztja alkalmazásunk különböző példányain.

Tartalmaz továbbá egy automatikus újrapróbálkozási lehetőség exponenciális tartalék házirenddel sikertelen munkákhoz. Itt van még a beépített műszerfal ez lehetővé teszi számunkra az összes munka figyelemmel kísérését. A JobRunr önfenntartó - a sikeres munkák automatikusan törlődnek konfigurálható idő elteltével, így nincs szükség manuális tárolási tisztításra.

4. Beállítás

Az egyszerűség kedvéért egy memóriában lévő adattárolót használunk az összes munkához kapcsolódó információ tárolására.

4.1. Maven konfiguráció

Ugorjunk egyenesen a Java kódra. De előtte a következő Maven-függőséget kell deklarálnunk pom.xml fájl:

 org.jobrunr jobrunr-spring-boot-starter 1.1.0 

4.2. Tavaszi integráció

Mielőtt egyenesen áttérnénk a háttérmunkák létrehozására, inicializálnunk kell a JobRunr programot. Ahogy használjuk a jobrunr-spring-boot-starter függőség, ez könnyű. Csak néhány tulajdonságot kell hozzáadnunk a alkalmazás.tulajdonságok:

org.jobrunr.background-job-server.enabled = true org.jobrunr.dashboard.enabled = true

Az első tulajdonság azt mondja a JobRunr-nak, hogy el akarjuk indítani a BackgroundJobServer hogy felelős a munkák feldolgozásáért. A második tulajdonság megadja a JobRunr számára, hogy indítsa el a beágyazott irányítópultot.

Alapértelmezés szerint a jobrunr-spring-boot-starter megpróbálja használni a meglévő Adatforrás relációs adatbázis esetén a munkával kapcsolatos összes információ tárolására.

Mivel azonban memóriában lévő adattárat fogunk használni, meg kell adnunk a StorageProvider bab:

@Bean public StorageProvider storageProvider (JobMapper jobMapper) {InMemoryStorageProvider storageProvider = új InMemoryStorageProvider (); storageProvider.setJobMapper (jobMapper); return storageProvider; }

5. Használat

Most megtudhatjuk, hogyan hozhatunk létre és ütemezhetünk háttérmunkákat tavasszal a JobRunr segítségével.

5.1. Injekció függőségek

Amikor munkahelyeket akarunk teremteni, be kell adnunk a JobScheduler és a meglévő tavaszi szolgáltatásunk, amely azt a módszert tartalmazza, amelyhez munkahelyeket akarunk teremteni, jelen esetben a SampleJobService:

@ Helyezzen be privát JobScheduler jobScheduler; @ Inject private SampleJobService sampleJobService;

A JobScheduler A JobRunr osztály lehetővé teszi számunkra, hogy új háttérmunkákat állítsunk össze vagy ütemezzünk.

A SampleJobService bármelyik meglévő tavaszi szolgáltatásunk lehet, amely olyan módszert tartalmaz, amelynek kezelése eltarthat egy webes kérelemben. Ez egy olyan módszer is lehet, amely más külső szolgáltatásokat hív meg, ahol rugalmasságot akarunk hozzáadni, mivel a JobRunr kivételt követően újra megpróbálja a módszert.

5.2. Tűz és felejtsd el munkák létrehozása

Most, hogy megvannak a függőségeink, tűz és felejtés munkahelyeket hozhatunk létre a enqueue módszer:

jobScheduler.enqueue (() -> sampleJobService.executeSampleJob ());

A munkáknak lehetnek paraméterei, mint bármely más lambdának:

jobScheduler.enqueue (() -> sampleJobService.executeSampleJob ("néhány karakterlánc"));

Ez a sor gondoskodik arról, hogy a lambda - beleértve a típust, a módszert és az argumentumokat - JSON-ként legyen sorosítva a tartós tárhelyre (egy RDBMS, mint például az Oracle, a Postgres, a MySql és a MariaDB, vagy a NoSQL adatbázis).

Dedikált dolgozói szálkészlet, amely minden másban fut BackgroundJobServers ezután a lehető leghamarabb végrehajtja ezeket a sorban álló háttérmunkákat, az első az elsőben kimenetelű módon. A JobRunr optimista zárolással garantálja munkájának egyetlen munkavállaló általi végrehajtását.

5.3. Munkahelyek ütemezése a jövőben

A munkákat a jövőben is ütemezhetjük a menetrend módszer:

jobScheduler.schedule (() -> sampleJobService.executeSampleJob (), LocalDateTime.now (). plusHours (5));

5.4. Munkahelyek ütemezése ismételten

Ha azt szeretnénk, hogy visszatérő munkahelyeink legyenek, akkor a ütemterv módszer:

jobScheduler.scheduleRecurrently (() -> sampleJobService.executeSampleJob (), Cron.hourly ());

5.5. Jelölés a @Munka Megjegyzés

A munka minden aspektusának ellenőrzéséhez feljegyezhetjük szolgáltatási módszerünket a @Munka annotáció. Ez lehetővé teszi a megjelenítési név beállítását az irányítópulton és az újrapróbálkozások számának konfigurálását, ha egy munka meghiúsul.

@Job (name = "A minta job a (z)% 0 változóval", újrapróbálkozás = 2) public void executeSampleJob (String változó) {...}

Akár olyan változókat is használhatunk, amelyek a megjelenített névben a String.format () szintaxis.

Ha nagyon specifikus használati eseteink vannak, amikor egy bizonyos munkát csak egy bizonyos kivétel mellett szeretnénk újrapróbálni, akkor megírhatjuk a sajátunkat ElectStateFilter ahol hozzáférünk a Munka és teljes irányítást a továbbiakban.

6. Irányítópult

A JobRunr beépített irányítópultot tartalmaz, amely lehetővé teszi számunkra a munkánk nyomon követését. Megtalálhatjuk a // localhost: 8000 címen, és megvizsgálhatjuk az összes munkát, beleértve az összes ismétlődő munkát, és becslést adhatunk arról, hogy mennyi időbe telik, amíg az összes felsorolt ​​munkát feldolgozzuk:

Rossz dolgok történhetnek, például lejárt egy SSL-tanúsítvány, vagy megtelt egy lemez. A JobRunr alapértelmezés szerint áttervezi a háttérmunkát egy exponenciális tartalék házirenddel. Ha a háttérmunka tízszer is kudarcot vall, csak akkor megy a nem sikerült állapot. Ezután dönthet úgy, hogy újra sorba állítja a sikertelen munkát, amikor a kiváltó ok megoldódott.

Mindez látható az irányítópulton, beleértve az egyes újrapróbálkozásokat a pontos hibaüzenettel és a verem teljes nyomával, hogy miért nem sikerült egy feladat:

7. Következtetés

Ebben a cikkben elkészítettük első alap ütemezőnket a JobRunr és a jobrunr-spring-boot-starter. A bemutató legfontosabb elvonása, hogy csak egy kódsorral tudtunk munkát létrehozni, XML-alapú konfiguráció és interfész megvalósításának szükségessége nélkül.

A példa teljes forráskódja elérhető a GitHub oldalon.