Úvod do rámca mikronautov

1. Čo je to mikronaut

Micronaut je rámec založený na JVM na vytváranie ľahkých modulárnych aplikácií. Vyvinutá OCI, rovnakou spoločnosťou, ktorá vytvorila Grails, Micronaut je najnovší rámec, ktorý umožňuje rýchle a ľahké vytváranie mikroslužieb.

Aj keď Micronaut obsahuje niektoré funkcie, ktoré sú podobné existujúcim rámcom ako Spring, má aj niekoľko nových funkcií, ktoré ho odlišujú. A s podporou Java, Groovy a Kotlin ponúka rôzne spôsoby vytvárania aplikácií.

2. Hlavné vlastnosti

Jednou z najvzrušujúcejších funkcií Micronauta je jeho mechanizmus vstrekovania závislosti na čase. Väčšina rámcov používa reflexiu a proxy na vykonávanie vkladania závislostí za behu. Mikronaut však vytvára svoje údaje o vstrekovaní závislostí v čase kompilácie. Výsledkom je rýchlejšie spustenie aplikácie a menšie nároky na pamäť.

Ďalšou vlastnosťou je jeho prvotriedna podpora reaktívneho programovania pre klientov aj servery. Výber konkrétnej reaktívnej implementácie je ponechaný na vývojára, pretože sú podporované programy RxJava aj Project Reactor.

Mikronaut má tiež niekoľko funkcií, ktoré z neho robia vynikajúci rámec pre vývoj natívnych cloudových aplikácií. Podporuje viac nástrojov na zisťovanie služieb, ako sú Eureka a Consul, a pracuje aj s rôznymi distribuovanými systémami sledovania, ako sú Zipkin a Jaeger.

Poskytuje tiež podporu pre vytváranie funkcií AWS lambda, čo uľahčuje vytváranie aplikácií bez servera.

3. Začíname

Najjednoduchší spôsob, ako začať, je použitie nástroja SDKMAN:

> SDK nainštalovať mikronauta 1.0.0.RC2

Týmto sa nainštalujú všetky binárne súbory, ktoré budeme potrebovať na zostavenie, testovanie a nasadenie aplikácií Micronaut. Poskytuje tiež nástroj Micronaut CLI, ktorý nám umožňuje ľahko zahájiť nové projekty.

Binárne artefakty sú k dispozícii aj na Sonatype a GitHub.

V nasledujúcich častiach sa pozrieme na niektoré funkcie rámca.

4. Injekcia závislostí

Ako už bolo spomenuté skôr, Micronaut spracováva závislosť vstrekovania v čase kompilácie, ktorá je iná ako väčšina kontajnerov IoC.

Stále však plne podporuje anotácie JSR-330 takže práca s fazuľami je podobná ako v iných rámcoch IoC.

Na automatické zapojenie fazule do nášho kódu použijeme @Inject:

@Inject private EmployeeService service;

The @Inject anotácia funguje rovnako ako @Autowired a možno ich použiť na polia, metódy, konštruktory a parametre.

V predvolenom nastavení sú všetky fazule klasifikované ako prototyp. Fazuľu singleton môžeme rýchlo vytvoriť pomocou @Singleton. Ak viac tried implementuje to isté rozhranie fazule, @Primárny môžu byť použité na ich rozpojenie:

@Primary @Singleton verejná trieda BlueCar implementuje auto {}

The @ Vyžaduje sa anotáciu je možné použiť, keď je fazuľa voliteľná, alebo ak chcete vykonať automatické zapojenie, iba ak sú splnené určité podmienky.

V tomto ohľade sa chová podobne ako Spring Boot @ Podmienené anotácie:

@Singleton @Requires (bôb = DataSource.class) @Requires (property = "enabled") @Requires (missingBeans = EmployeeService) @Requires (sdk = Sdk.JAVA, hodnota = "1,8") verejná trieda JdbcEmployeeService implementuje EmployeeService {}

5. Budovanie HTTP servera

Teraz sa pozrime na vytvorenie jednoduchej aplikácie servera HTTP. Na začiatok použijeme program SDKMAN na vytvorenie projektu:

> mn create-app hello-world-server -build maven

Týmto sa vytvorí nový projekt Java pomocou nástroja Maven v adresári s názvom ahoj-svet-server. V tomto adresári nájdeme náš hlavný zdrojový kód aplikácie, súbor Maven POM a ďalšie podporné súbory pre projekt.

Predvolená aplikácia, ktorá je veľmi jednoduchá:

public class ServerApplication {public static void main (String [] args) {Micronaut.run (ServerApplication.class); }}

5.1. Blokovanie protokolu HTTP

Samotná táto aplikácia veľa neurobí. Pridajme kontrolór, ktorý má dva koncové body. Obaja vrátia pozdrav, ale jeden použije znak ZÍSKAJTE Sloveso HTTP a druhé použije POST:

@Controller ("/ greet") verejná trieda GreetController {@Inject private GreetingService greetingService; @Get ("/ {name}") public String greet (názov reťazca) {return pozdravService.getGreeting () + meno; } @Post (value = "/ {name}", consumes = MediaType.TEXT_PLAIN) public String setGreeting (@Body String name) {return greetingService.getGreeting () + name; }}

5.2. Reaktívne IO

Micronaut štandardne implementuje tieto koncové body pomocou tradičných blokujúcich I / O. Avšak môžeme rýchlo implementovať neblokujúce koncové body iba zmenou návratového typu na akýkoľvek reaktívny neblokujúci typ.

Napríklad s RxJava môžeme použiť Pozorovateľné. Rovnako sa pri použití reaktora môžeme vrátiť Mono alebo Flux dátové typy:

@Get ("/ {name}") public Mono greet (String name) {return Mono.just (greetingService.getGreeting () + name); }

Pre blokujúce aj neblokujúce koncové body je Netty základným serverom používaným na spracovanie požiadaviek HTTP.

Za normálnych okolností sú požiadavky spracovávané v hlavnom fonde I / O vlákien, ktorý je vytvorený pri štarte, čo ich blokuje.

Keď sa však z koncového bodu radiča vráti neblokujúci dátový typ, Micronaut použije vlákno slučky udalosti Netty, čím celú požiadavku odblokuje.

6. Budovanie klienta HTTP

Teraz vytvorme klienta tak, aby využíval koncové body, ktoré sme práve vytvorili. Mikronaut poskytuje dva spôsoby vytvárania klientov HTTP:

  • Deklaratívny klient HTTP
  • Programový klient HTTP

6.1 Deklaratívny klient HTTP

Prvý a najrýchlejší spôsob vytvárania je použitie deklaratívneho prístupu:

@Client ("/ greet") verejné rozhranie GreetingClient {@Get ("/ {name}") String greet (String name); }

Všimnite si ako neimplementujeme žiadny kód na volanie našej služby. Namiesto toho Micronaut chápe, ako zavolať službu z podpisu metódy a anotácií, ktoré sme poskytli.

Na otestovanie tohto klienta môžeme vytvoriť test JUnit, ktorý na spustenie vloženej inštancie nášho servera používa rozhranie API zabudovaného servera:

public class GreetingClientTest {súkromný server EmbeddedServer; súkromný klient GreetingClient; @ Pred public void setup () {server = ApplicationContext.run (EmbeddedServer.class); klient = server.getApplicationContext (). getBean (GreetingClient.class); } @After public void cleanup () {server.stop (); } @Test public void testGreeting () {assertEquals (client.greet ("Mike"), "Hello Mike"); }}

6.2. Programový klient HTTP

Máme tiež možnosť napísať tradičnejšieho klienta, ak potrebujeme väčšiu kontrolu nad jeho správaním a implementáciou:

@Singleton verejná trieda ConcreteGreetingClient {private RxHttpClient httpClient; public ConcreteGreetingClient (@Client ("/") RxHttpClient httpClient) {this.httpClient = httpClient; } public String greet (String name) {HttpRequest req = HttpRequest.GET ("/ greet /" + name); návrat httpClient.retrieve (req) .blockingFirst (); } public Single greetAsync (názov reťazca) {HttpRequest req = HttpRequest.GET ("/ async / greet /" + meno); return httpClient.retrieve (req) .first ("Vyskytla sa chyba"); }}

Predvolený klient HTTP používa RxJava, takže môže ľahko pracovať s blokujúcimi alebo neblokujúcimi hovormi.

7. Mikronaut CLI

Už sme videli nástroj Micronaut CLI v akcii vyššie, keď sme ho použili na vytvorenie nášho ukážkového projektu.

V našom prípade sme vytvorili samostatnú aplikáciu, ktorá však má aj niekoľko ďalších možností.

7.1. Projekty federácie

V spoločnosti Micronaut je federácia iba skupinou samostatných aplikácií, ktoré žijú v rovnakom adresári. Pomocou federácií ich môžeme ľahko spravovať spoločne a zabezpečiť, aby mali rovnaké predvolené hodnoty a nastavenia.

Keď použijeme nástroj CLI na vygenerovanie federácie, vezme všetky rovnaké argumenty ako create-app príkaz. Vytvorí štruktúru projektu na najvyššej úrovni a odtiaľ sa vytvorí každá samostatná aplikácia vo svojom podadresári.

7.2. Vlastnosti

Pri vytváraní samostatnej aplikácie alebo federácie sa môžeme rozhodnúť, ktoré funkcie naša aplikácia potrebuje. To pomáha zabezpečiť, aby bol v projekte zahrnutý minimálny súbor závislostí.

Funkcie určujeme pomocou argument argumentov a dodanie zoznamu názvov funkcií oddelených čiarkami.

Zoznam dostupných funkcií nájdeme spustením nasledujúceho príkazu:

> služba profilových informácií mn Poskytované funkcie: -------------------- * annotation-api - pridáva API anotácií Java * * config-consul - pridáva podporu pre distribuovanú konfiguráciu s konzulom *covery-consul - Pridáva podporu pre Service Discovery s Consul * discovery-eureka - Pridáva podporu pre Service Discovery s Eureka * groovy - Vytvára Groovy aplikáciu [...] K dispozícii sú ďalšie funkcie

7.3. Existujúce projekty

Na úpravu existujúcich projektov môžeme tiež použiť nástroj CLI. Umožňuje nám to vytvárať fazuľa, klientov, kontrolóra a ďalšie. Keď spustíme mn príkaz z existujúceho projektu, budeme mať k dispozícii novú sadu príkazov:

> pomocník | Názov príkazu Popis príkazu ---------------------------------------------- - create-bean Vytvorí jednu fazuľu create-client Vytvorí klientske rozhranie create-controller Vytvorí radič a asociovaný test create-job Vytvorí úlohu s naplánovanou metódou

8. Záver

V tomto krátkom úvode do aplikácie Micronaut sme videli, aké ľahké je vytvoriť blokujúce aj neblokujúce servery a klientov HTTP. Preskúmali sme tiež niektoré funkcie jeho CLI.

Je to však iba malá ochutnávka z funkcií, ktoré ponúka. K dispozícii je tiež plná podpora funkcií bez servera, zisťovanie služieb, distribuované sledovanie, monitorovanie a metriky, distribuovaná konfigurácia a oveľa viac.

Aj keď mnohé z jeho funkcií pochádzajú z existujúcich rámcov ako Grails a Spring, má tiež množstvo jedinečných funkcií, vďaka ktorým vynikne sám od seba.

Ako vždy, vyššie môžeme nájsť ukážkový kód v našom repozitári GitHub.


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