Vodič za QuarkusIO

1. Uvod

U današnje vrijeme vrlo je uobičajeno napisati aplikaciju i razmjestiti se u oblak, a ne brinuti se o infrastrukturi. Bez poslužitelja i FaaS postali su vrlo popularni.

U ovoj vrsti okruženja, gdje se slučajevi često stvaraju i uništavaju, vrijeme pokretanja i vrijeme prvog zahtjeva izuzetno su važni, jer mogu stvoriti potpuno drugačije korisničko iskustvo.

Jezici kao što su JavaScript i Python uvijek su u središtu pozornosti ove vrste scenarija. Drugim riječima, Java sa svojim debelim JAR-ovima i dugim vremenom pokretanja nikada nije bila glavni kandidat.

U ovom vodiču, predstavit ćemo Quarkus i raspraviti je li to alternativa za učinkovitije dovođenje Jave u oblak.

2. QuarkusIO

QuarkusIO, nadzvučna subatomska Java, obećava isporuku malih artefakata, izuzetno brzo vrijeme pokretanja i niže vrijeme do prvog zahtjeva. U kombinaciji s GraalVM-om, Quarkus će sastaviti unaprijed (AOT).

A budući da je Quarkus izgrađen na vrhu standarda, ne trebamo naučiti ništa novo. Slijedom toga, među ostalim možemo koristiti CDI i JAX-RS. Također, Quarkus ima puno proširenja, uključujući ona koja podržavaju Hibernate, Kafka, OpenShift, Kubernetes i Vert.x.

3. Naša prva prijava

Najlakši način za stvaranje novog projekta Quarkus je otvaranje terminala i unos:

mvn io.quarkus: quarkus-maven-plugin: 0.13.1: create \ -DprojectGroupId = com.baeldung.quarkus \ -DprojectArtifactId = quarkus-project \ -DclassName = "com.baeldung.quarkus.HelloResource" \ -Dpath = /zdravo"

Ovo će generirati kostur projekta, a HelloResource s /zdravo izložena krajnja točka, konfiguracija, Maven projekt i Dockerfiles.

Jednom uvezeni u naš IDE, imat ćemo strukturu sličnu onoj prikazanoj na donjoj slici:

Ispitajmo sadržaj HelloResource razred:

@Path ("/ hello") javna klasa HelloResource {@GET @Produces (MediaType.TEXT_PLAIN) public String hello () {return "hello"; }}

Zasad sve izgleda dobro. U ovom trenutku imamo jednostavnu aplikaciju s jednom završnom točkom RESTEasy JAX-RS. Idemo naprijed i testirajte ga otvaranjem terminala i pokretanjem naredbe:

./mvnw kompajliranje quarkus: dev:

Naša REST krajnja točka trebala bi biti izložena na localhost: 8080 / zdravo. Isprobajmo s kovrča naredba:

$ curl localhost: 8080 / pozdrav pozdrav

4. Vruće ponovno punjenje

Kada se izvodi u razvojnom načinu (./mvn sastaviti quarkus: razv), Quarkus pruža mogućnost ponovnog punjenja. Drugim riječima, promjene napravljene u Java datotekama ili u konfiguracijskim datotekama automatski će se sastaviti nakon što se preglednik osvježi. Ovdje je najimpresivnija značajka da ne trebamo spremati datoteke. Ovo može biti dobro ili loše, ovisno o našim željama.

Sada ćemo izmijeniti naš primjer da bismo demonstrirali sposobnost ponovnog punjenja putem vrućeg. Ako se aplikacija zaustavi, možemo je jednostavno ponovno pokrenuti u razvojnom načinu. Upotrijebit ćemo isti primjer kao i prije kao početnu točku.

Prvo ćemo stvoriti HelloService razred:

@ApplicationScoped javna klasa HelloService {public String politeHello (naziv niza) {return "Hello Mr / Mrs" + name; }}

Sada ćemo izmijeniti HelloResource klase, ubrizgavanjem HelloService i dodavanje nove metode:

@Inject HelloService helloService; @GET @Produces (MediaType.APPLICATION_JSON) @Path ("/ polite / {name}") javni pozdrav niza (@PathParam ("name") Ime niza) {return helloService.politeHello (name); }

Dalje, testirajmo našu novu krajnju točku:

$ curl localhost: 8080 / zdravo / pristojno / Baeldung Pozdrav gospodine / gospođo Baeldung

Napravit ćemo još jednu izmjenu kako bismo pokazali da se ista može primijeniti na datoteke svojstava. Uredimo primjena.svojstva datoteku i dodajte još jedan ključ:

pozdrav = Dobro jutro

Nakon toga izmijenit ćemo HelloService za korištenje naše nove imovine:

@ConfigProperty (name = "pozdrav") private String pozdrav; javni String politeHello (naziv niza) {return pozdrav + "" + ime; }

Ako izvršimo isto kovrča naredbu, sada bismo trebali vidjeti:

Dobro jutro Baeldung

Aplikaciju možemo lako spakirati pokretanjem:

./mvnw paket 

Ovo će generirati 2 jar datoteke unutar cilj imenik:

  • quarkus-project-1.0-SNAPSHOT-runner.jar - izvršna jar sa kopiranim ovisnostima meta / lib
  • quarkus-project-1.0-SNAPSHOT.jar - sadrži klase i datoteke resursa

Sada možemo pokrenuti zapakiranu aplikaciju:

java -jar target / quarkus-project-1.0-SNAPSHOT-runner.jar

5. Izvorna slika

Dalje ćemo izraditi izvornu sliku naše aplikacije. Izvorna slika poboljšat će vrijeme pokretanja i vrijeme do prvog odgovora. Drugim riječima, to sadrži sve što je potrebno za pokretanje, uključujući minimalni JVM potreban za pokretanje aplikacije.

Za početak moramo imati instaliran GraalVM i konfigurirati varijablu okoline GRAALVM_HOME.

Sada ćemo zaustaviti aplikaciju (Ctrl + C), ako već nije zaustavljena, i pokrenuti naredbu:

./mvnw paket -Pnative

To može potrajati nekoliko sekundi. Budući da izvorne slike pokušavaju stvoriti sav kôd AOT za brže pokretanje, kao rezultat toga, imat ćemo dulje vrijeme izrade.

Možemo trčati ./mvnw verify -Pnative kako bismo provjerili je li naš izvorni artefakt pravilno konstruiran:

Drugo, hoćemo stvoriti sliku spremnika pomoću naše izvorne izvršne datoteke. Za to u našem stroju moramo pokrenuti vrijeme izvođenja spremnika (tj. Docker). Otvorimo prozor terminala i izvršimo:

./mvnw paket -Pnative -Dnative-image.docker-build = true 

Ovo će stvoriti 64-bitnu izvršnu verziju Linuxa, pa ako koristimo drugi OS, on se možda više neće moći pokretati. Za sada je to u redu.

Generacija projekata stvorila je Dockerfile.native za nas:

IZ registra.fedoraproject.org/fedora-minimalni WORKDIR / work / COPY target / * - runner / work / application RUN chmod 775 / work EXPOSE 8080 CMD ["./application", "-Dquarkus.http.host = 0.0.0.0 "] 

Ako pregledamo datoteku, nagovještavamo što slijedi. Prvo ćemo stvoriti sliku dockera:

docker build -f src / main / docker / Dockerfile.native -t quarkus / quarkus-project.

Sad možemo pokrenuti spremnik pomoću:

docker run -i --rm -p 8080: 8080 quarkus / quarkus-project

Kontejner je započeo u nevjerojatno kratkom vremenu od 0,009s. To je jedna od prednosti Quarkusa.

Na kraju, trebali bismo testirati naš modificirani REST da bismo provjerili valjanost naše aplikacije:

$ curl localhost: 8080 / zdravo / pristojno / Baeldung Dobro jutro Baeldung

6. Uvođenje u OpenShift

Nakon što završimo lokalno testiranje pomoću Dockera, rasporedit ćemo naš spremnik na OpenShift. Pod pretpostavkom da u našem registru imamo Dockerovu sliku, aplikaciju možemo implementirati slijedeći korake u nastavku:

oc new-build --binary --name = quarkus-project -l app = quarkus-project oc patch bc / quarkus-project -p '{"spec": {"strategy": {"dockerStrategy": {"dockerfilePath" : "src / main / docker / Dockerfile.native"}}}} 'oc start-build quarkus-project --from-dir =. --slijedi oc new-app --image-stream = quarkus-project: najnoviji oc expose usluga quarkus-project

Sada možemo dobiti URL aplikacije pokretanjem:

oc dobiti put

I na kraju, pristupit ćemo istoj krajnjoj točki (imajte na umu da se URL može razlikovati, ovisno o našoj IP adresi):

$ curl //quarkus-project-myproject.192.168.64.2.nip.io/hello/polite/Baeldung Dobro jutro Baeldung

7. Zaključak

U ovom smo članku pokazali da je Quarkus izvrstan dodatak koji Javu može učinkovitije donijeti u oblak. Na primjer, sada je moguće zamisliti Javu na AWS Lambda. Također, Quarkus se temelji na standardima poput JPA i JAX / RS. Stoga ne trebamo naučiti ništa novo.

Quarkus je u posljednje vrijeme privukao veliku pažnju, a svakodnevno se dodaje puno novih značajki. Postoji nekoliko projekata za brzi početak za isprobavanje Quarkusa u spremištu Quarkus GitHub.

Kao i uvijek, kôd za ovaj članak dostupan je na GitHubu. Sretno kodiranje!