Pozadina u proljeće s JobRunr-om

1. Pregled

U ovom uputstvu proučit ćemo distribuirano planiranje i obradu zadataka u pozadini u Javi pomoću JobRunr-a i dati integraciju s Springom.

2. O JobRunru

JobRunr je knjižnica koju možemo ugraditi u našu aplikaciju i koja nam omogućuje planiranje pozadinskih poslova pomoću Java 8 lambda. Možemo koristiti bilo koju postojeću metodu naših Spring usluga za stvaranje posla bez potrebe za implementacijom sučelja. Posao može biti kratak ili dugotrajan postupak i automatski će se prenijeti u pozadinsku nit tako da trenutni web zahtjev ne bude blokiran.

Da bi obavio svoj posao, JobRunr analizira lambda Java 8. Serijalizira ga kao JSON i pohranjuje u relacijsku bazu podataka ili u NoSQL spremište podataka.

3. Značajke JobRunr

Ako uočimo da proizvodimo previše pozadinskih poslova i naš se poslužitelj ne može nositi s opterećenjem, možemo to lako učiniti skalirajte vodoravno samo dodavanjem dodatnih primjeraka naše aplikacije. JobRunr će automatski podijeliti opterećenje i rasporediti sve poslove na različite instance naše aplikacije.

Sadrži i značajka automatskog ponovnog pokušaja s eksponencijalnom politikom povlačenja za propale poslove. Tu je i ugrađena nadzorna ploča koji nam omogućuje praćenje svih poslova. JobRunr se samoodržava - uspješni poslovi automatski će se izbrisati nakon prilagodljivog vremena, tako da nema potrebe za ručnim čišćenjem pohrane.

4. Postavljanje

Radi jednostavnosti koristit ćemo pohranu podataka u memoriji za pohranu svih podataka vezanih uz posao.

4.1. Maven konfiguracija

Krenimo ravno na Java kod. Ali prije toga, moramo imati sljedeću ovisnost o Mavenu u našoj pom.xml datoteka:

 org.jobrunr jobrunr-spring-boot-starter 1.1.0 

4.2. Proljetna integracija

Prije nego što prijeđemo ravno na to kako stvoriti pozadinske poslove, moramo inicijalizirati JobRunr. Kao što koristimo jobrunr-spring-boot-starter ovisnost, ovo je lako. Moramo dodati samo neka svojstva u primjena.svojstva:

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

Prvo svojstvo govori JobRunr-u da želimo pokrenuti instancu a BackgroundJobServer koja je odgovorna za obradu poslova. Drugo svojstvo govori JobRunru da pokrene ugrađenu nadzornu ploču.

Prema zadanim postavkama jobrunr-spring-boot-starter pokušat će upotrijebiti vaš postojeći Izvor podataka u slučaju relacijske baze podataka za pohranu svih podataka vezanih uz posao.

Međutim, budući da ćemo koristiti pohranu podataka u memoriji, trebamo osigurati StorageProvider grah:

@Bean public StorageProvider storageProvider (JobMapper jobMapper) {InMemoryStorageProvider storageProvider = novo InMemoryStorageProvider (); storageProvider.setJobMapper (jobMapper); vratiti storageProvider; }

5. Upotreba

Sada ćemo otkriti kako stvoriti i rasporediti pozadinske poslove u proljeće pomoću JobRunr-a.

5.1. Ubrizgajte ovisnosti

Kad želimo stvoriti radna mjesta, morat ćemo ubrizgati Planer poslova i naša postojeća proljetna usluga koja sadrži metodu za koju želimo stvoriti radna mjesta, u ovom slučaju, SampleJobService:

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

The Planer poslova klasa iz JobRunr-a omogućuje nam postavljanje novih zadataka u pozadinu ili raspoređivanje.

The SampleJobService može biti bilo koja od naših postojećih Spring usluga koja sadrži metodu koja bi mogla potrajati predugo za obradu u web zahtjevu. To također može biti metoda koja poziva neke druge vanjske usluge gdje želimo dodati elastičnost jer će JobRunr pokušati ponovo s metodom ako se dogodi izuzetak.

5.2. Stvaranje vatrogasnih i zaboravnih poslova

Sada kada imamo svoje ovisnosti, možemo stvoriti radna mjesta protiv i zaboravi koristeći enqueue metoda:

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

Poslovi mogu imati parametre, baš kao i bilo koja druga lambda:

jobScheduler.enqueue (() -> sampleJobService.executeSampleJob ("neki niz"));

Ovaj redak osigurava da se lambda - uključujući vrstu, metodu i argumente - serializira kao JSON na trajnu pohranu (RDBMS poput Oracle, Postgres, MySql i MariaDB ili NoSQL baza podataka).

Namjenski radnički fond niti koji se izvodi u svim različitim BackgroundJobServerZatim će izvršiti ove pozadinske poslove u redu u redu što je prije moguće, na način da prvi-prvi-izađe. JobRunr jamči izvršenje vašeg posla od strane jednog radnika optimističnim zaključavanjem.

5.3. Zakazivanje poslova u budućnosti

Također možemo planirati poslove u budućnosti pomoću raspored metoda:

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

5.4. Redovno raspoređivanje poslova

Ako želimo imati stalne poslove, moramo koristiti rasporedPovremeno metoda:

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

5.5. Bilježenje uz @Posao Bilješka

Da bismo kontrolirali sve aspekte posla, našu metodu usluge možemo označiti s @Posao bilješka. To omogućuje postavljanje imena za prikaz na nadzornoj ploči i konfiguriranje broja ponovljenih pokušaja u slučaju da posao ne uspije.

@Job (name = "Uzorak posla s varijablom% 0", pokušaji = 2) javna praznina executeSampleJob (string varijabla) {...}

Možemo čak koristiti i varijable koje se u ime za prikaz prosljeđuju našem poslu pomoću znaka String.format () sintaksa.

Ako imamo vrlo specifične slučajeve upotrebe u kojima bismo željeli pokušati s određenim poslom samo uz određenu iznimku, možemo sami napisati svoj ElectStateFilter gdje imamo pristup Posao i potpunu kontrolu kako dalje.

6. Nadzorna ploča

JobRunr dolazi s ugrađenom nadzornom pločom koja nam omogućuje praćenje naših poslova. Možemo ga pronaći na // localhost: 8000 i pregledati sve poslove, uključujući sve ponavljajuće se poslove i procjenu koliko će vremena trebati dok se svi obrađeni poslovi ne obrade:

Mogu se dogoditi loše stvari, na primjer, SSL certifikat je istekao ili je disk pun. JobRunr, prema zadanim postavkama, prerasporedit će pozadinski posao eksponencijalnom politikom povlačenja. Ako pozadinski posao i dalje bude uspijevao deset puta, tek tada će ići na Neuspjeh država. Tada možete odlučiti da ponovno postavite neuspjeli posao u red čekanja kada je korijenski uzrok riješen.

Sve je to vidljivo na nadzornoj ploči, uključujući svaki ponovni pokušaj s točnom porukom pogreške i kompletnim tragom steka zašto posao nije uspio:

7. Zaključak

U ovom smo članku izgradili svoj prvi osnovni planer koristeći JobRunr s jobrunr-spring-boot-starter. Ključni potez ovog vodiča je taj što smo uspjeli stvoriti posao sa samo jednim retkom koda i bez bilo kakve XML-temeljene konfiguracije ili potrebe za implementacijom sučelja.

Kompletni izvorni kod za primjer dostupan je na GitHubu.


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