Esittely
XNUMX. maaliskuuta RedHat (pian IBM)
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
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
@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
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
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
laajeneminen
Quarkus on laajennettava kehys. Tällä hetkellä on tilaus
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 -
Lähde: will.com