Quarkus on yliääninen subatominen Java. Lyhyt katsaus kehykseen

Quarkus on yliääninen subatominen Java. Lyhyt katsaus kehykseen

Esittely

XNUMX. maaliskuuta RedHat (pian IBM) esitetty uusi kehys - quarkus. Kehittäjien mukaan tämä kehys perustuu GraalVM:ään ja OpenJDK HotSpotiin ja on suunniteltu Kubernetesille. Quarkus-pino sisältää: JPA/Hibernate, JAX-RS/RESTEasy, Eclipse Vert.x, Netty, Apache Camel, Kafka, Prometheus ja muut.

Tavoitteena on tehdä Javasta Kubernetes-asennuksen ja palvelimettoman sovelluskehityksen johtava alusta, joka tarjoaa kehittäjille yhtenäisen lähestymistavan kehitykseen sekä reaktiivisissa että pakollisissa tyyleissä.

Jos katsot tämä kehysten luokittelu, niin Quarkus on jossain "aggregaattoreiden/koodigeneraattoreiden" ja "korkean tason fullstack-kehysten" välissä. Tämä on jo enemmän kuin aggregaattori, mutta se ei saavuta edes täyttä pinoa, koska... räätälöity taustakehitykseen.

Erittäin nopea sovellus käynnistyy ja alhainen muistin kulutus luvataan. Tässä on tiedot kehittäjän verkkosivustolta:

Aika alusta ensimmäiseen vastaukseen:

kokoonpano
REST
REST+JPA

Quarkus+GraalVM
0.014
0.055

Quarkus+OpenJDK
0.75
2.5

Perinteinen Cloud Native Stack*
4.3
9.5

Muistin kulutus (Mb):

kokoonpano
REST
REST+JPA

Quarkus+GraalVM
13
35

Quarkus+OpenJDK
74
130

Perinteinen Cloud Native Stack*
140
218

Vaikuttavaa, eikö?

*En löytänyt mitään tietoa tästä teknologiapinosta, voimme olettaa, että tämä on jonkinlainen Spring Boot ylimääräisellä runkosarjalla.

Hei maailma!

Yksinkertaisin Quarkuksella kirjoitettu sovellus näyttäisi tältä:

@Path("/hello")
public class GreetingResource {

   @GET
   @Produces(MediaType.TEXT_PLAIN)
   public String hello() {
       return "hello";
   }
}

Se on kirjaimellisesti yksi luokka ja se riittää! Voit käyttää sovellusta Mavenilla kehitystilassa:

mvn compile quarkus:dev
…
$ curl http://localhost:8080/hello
hello

Ero tavalliseen hakemukseen on se, että siinä ei ole Sovellusluokkaa! Quarkus tukee kuumaa uudelleenlatausta, joten voit muuttaa sovellustasi käynnistämättä sitä uudelleen, mikä nopeuttaa kehitystä entisestään.

Mitä seuraavaksi? Voit lisätä palvelun ohjaimeen merkinnän avulla pistää. Palvelukoodi:

@ApplicationScoped
public class GreetingService {

   public String greeting(String name) {
       return "Hello " + name + "!";
   }
}

Ohjain:

@Path("/hello")
public class GreetingResource {

   @Inject
   GreetingService service;

   @GET
   @Produces(MediaType.TEXT_PLAIN)
   @Path("/{name}")
   public String greeting(@PathParam("name") String name) {
       return service.greeting(name);
   }
}

$ curl http://localhost:8080/hello/developer
Hello developer!

Huomaa, että Quarkus käyttää vakiomerkintöjä tutuista kehyksistä - CDI ja JAX-RS. Sinun ei tarvitse opetella mitään uutta, jos olet työskennellyt aiemmin CDI:n ja JAX-RS:n kanssa.

Työskentele tietokannan kanssa

Entiteeteille käytetään horrostilaa ja JPA:n vakiomerkintöjä. Kuten REST-ohjaimissa, sinun on kirjoitettava vähintään koodi. Riittää, kun ilmoitat riippuvuudet kokoonpanotiedostossa, lisäät huomautuksia @Entity ja määritä tietolähde kohdassa application.properties.

Kaikki. Ei sessionFactory-, persistence.xml- tai muita palvelutiedostoja. Kirjoitamme vain tarvittavan koodin. Tarvittaessa voit kuitenkin luoda persistence.xml-tiedoston ja määrittää ORM-kerroksen tarkemmin.

Quarkus tukee entiteettien välimuistia, kokoelmia yksi-moneen-suhteita varten ja kyselyitä. Ensi silmäyksellä näyttää hyvältä, mutta sitä se on paikallinen välimuisti yhdelle Kubernetes-solmulle. Nuo. Eri solmujen välimuistit eivät ole synkronoituja keskenään. Toivottavasti tämä on väliaikaista.

Asynkroninen koodin suoritus

Kuten edellä mainittiin, Quarkus tukee myös reaktiivista ohjelmointityyliä. Edellisen hakemuksen koodi voidaan kirjoittaa eri muodossa.

@Path("/hello")
public class GreetingResource {

   @GET
   @Produces(MediaType.TEXT_PLAIN)
   @Path("/{name}")
   public CompletionStage<String> greeting(@PathParam("name") String name) {
       return CompletableFuture.supplyAsync(() -> {
           return "Hello " + name + "!";
       });
   }
}

Asynkroninen koodi voidaan myös siirtää palveluun, tulos on sama.

Testaus

Testit Quarkus-sovelluksille voidaan kirjoittaa JUnit4:ssä tai JUnit5:ssä. Alla on esimerkkitesti päätepisteelle, se on kirjoitettu RestAssuredilla, mutta toista kehystä voidaan käyttää:

@QuarkusTest
public class GreetingResourceTest {

   @Test
   public void testGreetingEndpoint() {
       String uuid = UUID.randomUUID().toString();
       given()
         .pathParam("name", uuid)
         .when().get("/hello/{name}")
         .then()
           .statusCode(200)
           .body(is("Hello " + uuid + "!"));
   }
}

@QuarkusTest-merkintä kehottaa sinua suorittamaan sovelluksen ennen testien suorittamista. Loput ovat kaikille kehittäjille tuttua koodia.

Alustakohtainen sovellus

Koska Quarkus on tiiviisti integroitu GraalVM:ään, on tietysti mahdollista luoda alustakohtaista koodia. Tätä varten sinun on asennettava GraalVM ja määritettävä GRAALVM_HOME-ympäristömuuttuja. Edelleen rekisteröi profiili kokoonpanoa varten ja määritä se sovellusta rakennettaessa:

mvn package -Pnative

Mielenkiintoista on, että luotua sovellusta voidaan testata. Ja tämä on tärkeää, koska alkuperäisen koodin suoritus voi poiketa suorituksesta JVM:ssä. @SubstrateTest-merkintä suorittaa alustakohtaisen sovelluskoodin. Olemassa olevan testikoodin uudelleenkäyttö voidaan tehdä käyttämällä perintöä, minkä seurauksena alustariippuvaisen sovelluksen testaamiseen käytettävä koodi näyttää tältä:

@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {

}

Luotu kuva voidaan pakata Dockeriin ja ajaa Kubernetesissa tai OpenShiftissä, joka on kuvattu yksityiskohtaisesti ohjeet.

Työkalut

Quarkus-kehystä voidaan käyttää Mavenin ja Gradlen kanssa. Maven on täysin tuettu, toisin kuin Gradle. Valitettavasti Gradle ei tällä hetkellä tue tyhjän projektin generoimista, verkkosivuilla on yksityiskohtaista tietoa oppikirja.

laajeneminen

Quarkus on laajennettava kehys. Tällä hetkellä on tilaus 40 pidennystä, jotka lisäävät erilaisia ​​toimintoja - tuesta Jousi DI kontti и Apache-kameli ennen kuin kirjaat ja julkaiset käynnissä olevia palveluita koskevia mittareita. Ja Javan lisäksi Kotlinissa on jo laajennus, joka tukee sovellusten kirjoittamista.

Johtopäätös

Omasta mielestäni Quarkus on aika trendien mukainen. Taustakoodin kehittäminen on entistä helpompaa ja helpompaa, ja tämä kehys yksinkertaistaa ja nopeuttaa palvelukehitystä entisestään lisäämällä alkuperäisen tuen Dockerille ja Kubernetesille. Valtava plussa on sisäänrakennettu tuki GraalVM:lle ja alustariippuvaisten kuvien luominen, mikä mahdollistaa palvelujen käynnistymisen todella nopeasti ja vie vähän muistitilaa. Ja tämä on erittäin tärkeää meidän aikanamme, jolloin tunnemme suurta intohimoa mikropalveluihin ja palvelimettomaan arkkitehtuuriin.

Virallinen sivusto - quarkus.io. Esimerkkejä nopean aloituksen projekteista on jo saatavilla osoitteessa GitHub.

Lähde: will.com

Lisää kommentti