Pozadie pracovných miest na jar s JobRunr

1. Prehľad

V tomto tutoriále sa pozrieme na distribuované plánovanie a spracovanie úloh na pozadí v Jave pomocou JobRunr a necháme ich integrovať do Spring.

2. O spoločnosti JobRunr

JobRunr je knižnica, ktorú môžeme vložiť do našej aplikácie a ktorá nám umožňuje plánovať úlohy na pozadí pomocou lambdy Java 8. Na vytvorenie pracovného miesta bez potreby implementácie rozhrania môžeme použiť ktorúkoľvek existujúcu metódu našich jarných služieb. Úloha môže byť krátkodobým alebo dlhodobým procesom a bude automaticky presunutá na vlákno na pozadí, aby nebola blokovaná aktuálna webová požiadavka.

JobRunr kvôli svojej práci analyzuje lambdu Java 8. Serializuje ho ako JSON a ukladá ho do relačnej databázy alebo do dátového úložiska NoSQL.

3. Funkcie JobRunr

Ak vidíme, že vyrábame príliš veľa úloh na pozadí a náš server nedokáže zvládnuť záťaž, môžeme to ľahko urobiť mierka vodorovne iba pridaním ďalších inštancií našej aplikácie. JobRunr bude zdieľať záťaž automaticky a distribuovať všetky úlohy v rôznych inštanciách našej aplikácie.

Obsahuje tiež funkcia automatického opakovania s exponenciálnou politikou back-off za neúspešné práce. K dispozícii je tiež zabudovaná palubná doska ktorý nám umožňuje sledovať všetky pracovné miesta. JobRunr je sebestačný - úspešné úlohy budú automaticky odstránené po konfigurovateľnom čase, takže nie je potrebné vykonať manuálne vyčistenie úložiska.

4. Inštalácia

Kvôli jednoduchosti budeme na ukladanie všetkých informácií týkajúcich sa úloh používať úložisko dát v pamäti.

4.1. Konfigurácia Maven

Preskočme priamo na kód Java. Ale predtým musíme v sebe deklarovať nasledujúcu závislosť Maven pom.xml spis:

 org.jobrunr jobrunr-spring-boot-starter 1.1.0 

4.2. Jarná integrácia

Predtým, ako prejdeme priamo k tomu, ako vytvoriť úlohy na pozadí, musíme inicializovať JobRunr. Ako používame jobrunr-pružina-štartér závislosť, je to ľahké. Musíme len pridať niektoré vlastnosti do application.properties:

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

Prvá vlastnosť hovorí JobRunru, že chceme spustiť inštanciu a BackgroundJobServer ktorý je zodpovedný za spracovanie pracovných miest. Druhá vlastnosť hovorí JobRunru, aby spustil vložený informačný panel.

V predvolenom nastavení je jobrunr-pružina-štartér sa pokúsi použiť váš existujúci Dátový zdroj v prípade relačnej databázy uložiť všetky informácie týkajúce sa zákazky.

Pretože však použijeme úložisko dát v pamäti, musíme poskytnúť StorageProvider fazuľa:

@Bean public StorageProvider storageProvider (JobMapper jobMapper) {InMemoryStorageProvider storageProvider = nový InMemoryStorageProvider (); storageProvider.setJobMapper (jobMapper); vrátiť storageProvider; }

5. Použitie

Teraz poďme zistiť, ako vytvoriť a naplánovať úlohy na pozadí na jar pomocou JobRunru.

5.1. Vložte závislosti

Ak chceme vytvoriť pracovné miesta, budeme musieť vložiť JobScheduler a našu existujúcu jarnú službu obsahujúcu metódu, pre ktorú chceme vytvárať pracovné miesta, v tomto prípade SampleJobService:

@Inject private JobScheduler jobScheduler; @Inject private SampleJobService sampleJobService;

The JobScheduler trieda z JobRunr nám umožňuje zaradiť alebo naplánovať nové úlohy na pozadí.

The SampleJobService môže byť ktorákoľvek z našich existujúcich jarných služieb obsahujúcich metódu, ktorej spracovanie webovej žiadosti môže trvať príliš dlho. Môže to byť tiež metóda, ktorá volá niektoré ďalšie externé služby, kde chceme pridať odolnosť, pretože JobRunr túto metódu zopakuje, ak dôjde k výnimke.

5.2. Vytváranie ohnivých a zabudnutých pracovných miest

Teraz, keď máme svoje závislosti, môžeme vytvárať úlohy typu „zabudni a zabudni“ pomocou zaradiť do poradia metóda:

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

Úlohy môžu mať parametre, rovnako ako každá iná lambda:

jobScheduler.enqueue (() -> sampleJobService.executeSampleJob ("nejaký reťazec"));

Tento riadok zaisťuje, že lambda - vrátane typu, metódy a argumentov - je serializovaná ako JSON na trvalé úložisko (RDBMS ako Oracle, Postgres, MySql a MariaDB alebo databáza NoSQL).

Špeciálna skupina pracovníkov vlákien bežiacich vo všetkých rôznych BackgroundJobServers potom vykoná tieto úlohy v poradí na pozadí čo najskôr, spôsobom „kto-prvý-prvý-von“. JobRunr zaručuje optimistickým uzamknutím výkon vašej práce jedným pracovníkom.

5.3. Plánovanie pracovných miest v budúcnosti

Môžeme tiež naplánovať úlohy do budúcnosti pomocou harmonogram metóda:

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

5.4. Súbežné plánovanie úloh

Ak chceme mať opakujúce sa zamestnania, musíme použiť harmonogram metóda:

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

5.5. Anotácia s @Job Anotácia

Na kontrolu všetkých aspektov práce môžeme anotovať našu metódu služby pomocou @Job anotácia. To umožňuje nastaviť zobrazovaný názov na prístrojovej doske a nakonfigurovať počet opakovaní v prípade zlyhania úlohy.

@Job (name = "The sample job with variable% 0", retries = 2) public void executeSampleJob (String variable) {...}

V zobrazenom mene môžeme dokonca použiť premenné, ktoré sa našej práci odovzdávajú pomocou znaku String.format () syntax.

Ak máme veľmi konkrétne prípady použitia, keď by sme sa chceli pokúsiť o konkrétnu prácu znova iba na určitú výnimku, môžeme napísať svoj vlastný ElectStateFilter kde máme prístup k Job a úplnú kontrolu nad tým, ako postupovať.

6. Dashboard

JobRunr je dodávaný so zabudovaným palubným panelom, ktorý nám umožňuje monitorovať naše úlohy. Nájdeme ho na // localhost: 8000 a skontrolujeme všetky úlohy vrátane všetkých opakujúcich sa úloh a odhad, ako dlho to bude trvať, kým sa spracujú všetky zaradené úlohy:

Môžu sa stať zlé veci, napríklad vypršala platnosť certifikátu SSL alebo je disk plný. JobRunr predvolene zmení plánovanie úlohy na pozadí s exponenciálnou politikou back-off. Ak bude úloha na pozadí zlyhávať desaťkrát, až potom prejde na server Zlyhalo štát. Po vyriešení hlavnej príčiny sa potom môžete rozhodnúť znova zaradiť neúspešnú úlohu do frontu.

To všetko je viditeľné na informačnom paneli vrátane každého opakovania s presnou chybovou správou a úplného sledovania zásobníka, prečo úloha zlyhala:

7. Záver

V tomto článku sme zostavili náš prvý základný plánovač pomocou JobRunru s jobrunr-pružina-štartér. Kľúčovým príkladom z tohto tutoriálu je, že sme dokázali vytvoriť prácu iba s jedným riadkom kódu a bez akejkoľvek konfigurácie založenej na XML alebo nutnosti implementovať rozhranie.

Celý zdrojový kód tohto príkladu je k dispozícii na GitHub.


$config[zx-auto] not found$config[zx-overlay] not found