
Faatomuaga
I le aso 7 o Mati, RedHat (e le o toe mamao IBM) fa'avae fou - . 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 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
helloO 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 . 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 ma faʻamaonia pe a fausia le talosaga:
mvn package -PnativeO 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 .
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 .
Taiaga
Quarkus ose fa'ava'a fa'alautele. I le taimi nei o loʻo i ai se faʻatonuga , lea e fa'aopoopoina ai galuega eseese - mai le lagolago и 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 - . O fa'ata'ita'iga o galuega fa'atino mo se amataga vave o lo'o avanoa i luga .
puna: www.habr.com
