Quarkus o se supersonic subatomic Java. Aotelega puupuu o le auivi

Quarkus o se supersonic subatomic Java. Aotelega puupuu o le auivi

Faatomuaga

I le aso 7 o Mati, RedHat (e le o toe mamao IBM) tuuina atu fa'avae fou - quarkus. E tusa ai ma le au atiaʻe, o lenei faʻavae e faʻavae i luga ole GraalVM ma OpenJDK HotSpot ma ua mamanuina mo Kubernetes. O le faaputuga Quarkus e aofia ai: JPA/Hibernate, JAX-RS/RESTEasy, Eclipse Vert.x, Netty, Apache Camel, Kafka, Prometheus ma isi.

O le sini o le avea lea o Java ma taʻiala taʻutaʻua mo le faʻaogaina o Kubernetes ma le atinaʻeina o talosaga e leai se server, e tuʻuina atu ai i le au atinaʻe se auala autasi i le atinaʻe i sitaili faʻaalia ma le taua.

Afai e te tilotilo i ai lenei fa'avasegaina o fa'ava'a, ona iai lea o Quarkus i le va o le "Aggregators/Code Generators" ma le "Tulaga maualuga fa'avae atoa". Ua sili atu lenei mea nai lo se faʻamaopoopo, ae e le oʻo lava i le faʻaputu atoa, aua ... fa'atatau mo le atina'e pito i tua.

E matua maualuga tele le saoasaoa o le faʻalauiloaina o talosaga ma le faʻaitiitia o le faʻaaogaina o manatuaga ua folafola mai. O fa'amaumauga nei mai le 'upega tafa'ilagi a le fa'atupuina:

Taimi mai le amataga i le tali muamua (s):

Fetuunaiga
mapu
MALOLO + JPA

Quarkus+GraalVM
0.014
0.055

Quarkus+OpenJDK
0.75
2.5

Fa'aputuga masani a le Ao*
4.3
9.5

Fa'aaogāga manatua (Mb):

Fetuunaiga
mapu
MALOLO + JPA

Quarkus+GraalVM
13
35

Quarkus+OpenJDK
74
130

Fa'aputuga masani a le Ao*
140
218

Matagofie, a ea?

*Ou te leʻi mauaina ni faʻamatalaga e uiga i lenei faʻaputuga tekonolosi, e mafai ona tatou manatu o se ituaiga o Spring Boot ma se pusa tino faaopoopo..

Talofa Lalolagi!

O le tusi sili ona faigofie na tusia i Quarkus e pei o lenei:

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

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

E tasi lava le vasega ma ua lava lena! E mafai ona e faʻaogaina le talosaga e faʻaaoga ai Maven i le atinaʻe faiga:

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

O le eseesega mai se talosaga masani e leai se vasega Talosaga! E lagolagoina e Quarkus le toe uta vevela, o lea e mafai ai ona e suia lau talosaga e aunoa ma le toe amataina, faʻateleina le atinaʻe.

O le a le isi mea? E mafai ona e fa'aopoopoina se 'au'aunaga i se pule e fa'aaoga ai se fa'amatalaga Fa tui. Code o auaunaga:

@ApplicationScoped
public class GreetingService {

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

Pule:

@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!

Manatua o Quarkus e faʻaogaina faʻamatalaga masani mai faʻasalalauga masani - CDI ma JAX-RS. E leai se manaʻoga e aʻoaʻoina se mea fou pe afai na e galue muamua ma CDI ma JAX-RS, ioe.

Galulue faʻatasi ma faʻamaumauga

O lo'o fa'aogaina fa'amatalaga fa'apitoa ma JPA fa'apitoa mo fa'alapotopotoga. E pei o le REST controllers, e tatau ona e tusia se laʻititi o le code. Ua lava le faʻaalia o faʻalagolago i le faila faʻapotopotoga, faʻaopoopo faʻamatalaga @Entity ma configure datasource i application.properties.

O mea uma. Leai se sessionFactory, persistence.xml po'o isi faila tautua. Matou te tusia naʻo le code e manaʻomia. Ae peitaʻi, afai e manaʻomia, e mafai ona e fatuina se faila persistence.xml ma faʻapipiʻi le ORM layer sili atu ona lelei.

E lagolagoina e Quarkus le fa'asaoina o fa'alapotopotoga, fa'aputuga mo so'oga tasi-i-tele, ma fesili. I le tepa muamua e foliga manaia, ae e lelei lotoifale caching, mo le tasi node Kubernetes. O na. O fa'amaufa'ailoga o nodes 'ese'ese e le'o fa'atasi le tasi ma le isi. Ou te faamoemoe e le tumau lenei mea.

Fa'atinoina o le code asynchronous

E pei ona taʻua i luga, e lagolagoina foi e Quarkus le faiga polokalame faʻaalia. O le code o le talosaga muamua e mafai ona tusia i se isi faiga.

@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 + "!";
       });
   }
}

Asynchronous code e mafai foi ona faʻafeiloaʻi i le auaunaga, o le a tutusa le iʻuga.

Suʻega

Su'ega mo talosaga a Quarkus e mafai ona tusia ile JUnit4 po'o le JUnit5. Lalo o se faʻataʻitaʻiga faʻataʻitaʻiga mo se faʻaiʻuga, ua tusia e faʻaaoga ai RestAssured, ae mafai ona faʻaogaina se isi faʻavae:

@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 + "!"));
   }
}

O le @QuarkusTest faʻamatalaga e faʻatonuina oe e faʻatino le talosaga aʻo leʻi faia suʻega. O le isi mea o lo'o masani ai tagata fa'atupu uma.

Fa'aoga fa'apitoa

Talu ai o Quarkus o loʻo faʻapipiʻi faʻatasi ma GraalVM, e mautinoa lava e mafai ona faʻatupuina faʻailoga faʻapitoa-faʻapitoa. Ina ia faia lenei mea, e tatau ona e faʻapipiʻi GraalVM ma faʻamaonia le suiga ole siosiomaga GRAALVM_HOME. E le gata i lea resitala se talaaga mo le faʻapotopotoga ma faʻamaonia pe a fausia le talosaga:

mvn package -Pnative

O le mea e malie ai, e mafai ona faʻataʻitaʻiina le talosaga na faia. Ma e taua lenei mea ona o le faʻatinoina o le tulafono faʻale-aganuʻu atonu e ese mai le faʻatinoina ile JVM. O le @SubstrateTest faʻamatalaga e faʻatautaia ai le faʻailoga faʻapitoa o talosaga. O le toe fa'aaogaina o le fa'ailoga o lo'o iai e mafai ona fa'aaoga le tofi, o se fa'ai'uga, o le fa'ailoga mo le su'eina o se talosaga fa'alagolago i luga ole laiga e pei o lenei:

@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {

}

O le ata gaosia e mafai ona afifiina i Docker ma tamoe i Kubernetes poʻo OpenShift, faʻamatala auiliili i totonu faatonuga.

Meafaigaluega

E mafai ona faʻaogaina le faʻavae Quarkus ma Maven ma Gradle. Maven e lagolagoina atoatoa, e le pei o Gradle. Ae paga lea, i le taimi nei e le lagolagoina e Gradle le fausiaina o se galuega gaogao o loʻo i ai faʻamatalaga auiliili i luga o le upega tafaʻilagi le tusi.

Taiaga

Quarkus ose fa'ava'a fa'alautele. I le taimi nei o loʻo i ai se faʻatonuga 40 fa'aopoopoga, lea e fa'aopoopoina ai galuega eseese - mai le lagolago Spring DI pusa и Apache Kamela a'o le'i fa'amauina ma fa'asalalau fua fa'atatau mo le fa'atinoina o auaunaga. Ma ua i ai se faʻaopoopoga e lagolago ai tusi talosaga i Kotlin, faʻaopoopo i Java.

iʻuga

I loʻu manatu, o Quarkus e fetaui lelei ma faiga o taimi. O le atinaʻeina o code backend ua faʻafaigofie ma faigofie, ma o lenei faʻavae e faʻafaigofie ma faʻavavevave le atinaʻeina o auaunaga e ala i le faʻaopoopoina o le lagolago faʻale-aganuʻu mo Docker ma Kubernetes. O se faʻaopoopoga tele o le lagolago faʻapipiʻiina mo GraalVM ma le faʻatupuina o ata faʻalagolago i luga ole laiga, lea e mafai ai ona amata vave auaunaga ma faʻaalu sina avanoa manatua. Ma e taua tele lenei mea i lo tatou taimi o le tele o tuʻinanauga mo microservices ma serverless architecture.

Nofoaga aloaia - quarkus.io. O fa'ata'ita'iga o galuega fa'atino mo se amataga vave o lo'o avanoa i luga GitHub.

puna: www.habr.com