Introduzzjoni
Fis-7 ta' Marzu, RedHat (dalwaqt IBM)
L-għan huwa li Java ssir il-pjattaforma ewlenija għall-iskjerament ta 'Kubernetes u l-iżvilupp ta' applikazzjoni mingħajr server, li tipprovdi lill-iżviluppaturi b'approċċ unifikat għall-iżvilupp kemm fi stili reattivi kif ukoll imperattivi.
Jekk tħares lejn
Veloċità għolja ħafna tat-tnedija tal-applikazzjoni u konsum baxx ta 'memorja huma mwiegħda. Hawnhekk hawn id-dejta mill-websajt tal-iżviluppatur:
Ħin mill-bidu sal-ewwel rispons(i):
Konfigurazzjoni
SERĦAN
REST+JPA
Quarkus+GraalVM
0.014
0.055
Quarkus+OpenJDK
0.75
2.5
Cloud Native Stack tradizzjonali*
4.3
9.5
Konsum tal-memorja (Mb):
Konfigurazzjoni
SERĦAN
REST+JPA
Quarkus+GraalVM
13
35
Quarkus+OpenJDK
74
130
Cloud Native Stack tradizzjonali*
140
218
Impressjonanti, hux?
*Ma sibt l-ebda informazzjoni dwar dan il-munzell tat-teknoloġija, nistgħu nassumu li dan huwa xi tip ta 'Spring Boot b'kit tal-ġisem addizzjonali.
Hello dinja!
L-aktar applikazzjoni sempliċi miktuba f'Quarkus tidher bħal din:
@Path("/hello")
public class GreetingResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return "hello";
}
}
Huwa litteralment klassi waħda u dan huwa biżżejjed! Tista 'tħaddem l-applikazzjoni billi tuża Maven fil-mod ta' żvilupp:
mvn compile quarkus:dev
…
$ curl http://localhost:8080/hello
hello
Id-differenza minn applikazzjoni regolari hija li m'hemm l-ebda klassi ta 'Applikazzjoni! Quarkus jappoġġja hot reload, sabiex tkun tista' tibdel l-applikazzjoni tiegħek mingħajr ma terġa' tibda, u b'hekk l-iżvilupp ikun saħansitra aktar mgħaġġel.
X'inhu jmiss? Tista' żżid servizz ma' kontrollur billi tuża annotazzjoni
@ApplicationScoped
public class GreetingService {
public String greeting(String name) {
return "Hello " + name + "!";
}
}
Kontrollur:
@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!
Innota li Quarkus juża annotazzjonijiet standard minn oqfsa familjari - CDI u JAX-RS. M'hemmx għalfejn titgħallem xi ħaġa ġdida jekk ħdimt ma' CDI u JAX-RS qabel, ovvjament.
Ħidma mad-database
Jintużaw annotazzjonijiet Hibernate u standard JPA għall-entitajiet. Bħal fil-każ tal-kontrolluri REST, trid tikteb minimu ta 'kodiċi. Huwa biżżejjed li tindika d-dipendenzi fil-fajl tal-assemblaġġ, żid annotazzjonijiet @Entity
u kkonfigurat datasource f'application.properties.
Kollha. L-ebda sessionFactory, persistence.xml jew fajls oħra ta’ servizz. Aħna niktbu biss il-kodiċi li huwa meħtieġ. Madankollu, jekk meħtieġ, tista 'toħloq fajl persistentence.xml u tikkonfigura s-saff ORM b'mod aktar fin.
Quarkus jappoġġja l-caching ta' entitajiet, kollezzjonijiet għal relazzjonijiet minn wieħed għal ħafna, u mistoqsijiet. L-ewwel daqqa t'għajn jidher tajjeb ħafna, imma hekk lokali caching, għal nodu wieħed Kubernetes. Dawk. Il-caches ta 'nodi differenti mhumiex sinkronizzati ma' xulxin. Nispera li dan huwa temporanju.
Eżekuzzjoni ta' kodiċi mhux sinkroniku
Kif imsemmi hawn fuq, Quarkus jappoġġja wkoll l-istil tal-ipprogrammar reattiv. Il-kodiċi tal-applikazzjoni preċedenti jista' jinkiteb f'forma differenti.
@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 + "!";
});
}
}
Kodiċi asinkronu jista 'wkoll jiġi trasferit għas-servizz, ir-riżultat se jkun l-istess.
Ittestjar
It-testijiet għall-applikazzjonijiet tal-Quarkus jistgħu jinkitbu f'JUnit4 jew JUnit5. Hawn taħt hemm test eżempju għal endpoint, huwa miktub bl-użu RestAssured, iżda jista 'jintuża qafas ieħor:
@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 + "!"));
}
}
L-annotazzjoni @QuarkusTest tagħtik istruzzjonijiet biex tħaddem l-applikazzjoni qabel ma tmexxi t-testijiet. Il-bqija huwa kodiċi familjari għall-iżviluppaturi kollha.
Applikazzjoni speċifika għall-pjattaforma
Peress li Quarkus huwa integrat sewwa ma 'GraalVM, huwa naturalment possibbli li jiġi ġġenerat kodiċi speċifiku għall-pjattaforma. Biex tagħmel dan, trid tinstalla GraalVM u tispeċifika l-varjabbli ambjentali GRAALVM_HOME. Aktar minn hekk
mvn package -Pnative
Interessanti, l-applikazzjoni ġġenerata tista 'tiġi ttestjata. U dan huwa importanti għaliex l-eżekuzzjoni tal-kodiċi nattiv tista 'tvarja mill-eżekuzzjoni fuq il-JVM. L-annotazzjoni @SubstrateTest tħaddem kodiċi ta' applikazzjoni speċifiku għall-pjattaforma. L-użu mill-ġdid tal-kodiċi tat-test eżistenti jista 'jsir bl-użu tal-wirt; bħala riżultat, il-kodiċi għall-ittestjar ta' applikazzjoni li tiddependi mill-pjattaforma tidher bħal din:
@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {
}
L-immaġni ġġenerata tista' tiġi ppakkjata f'Docker u titħaddem f'Kubernetes jew OpenShift, deskritta fid-dettall f'
Għodda tal-għodda
Il-qafas Quarkus jista 'jintuża ma' Maven u Gradle. Maven huwa appoġġjat bis-sħiħ, kuntrarjament għal Gradle. Sfortunatament, bħalissa Gradle ma jappoġġjax il-ġenerazzjoni ta' proġett vojt; hemm informazzjoni dettaljata fuq il-websajt
Estensjonijiet
Quarkus huwa qafas estensibbli. Bħalissa hemm ordni
Konklużjoni
Fl-opinjoni tiegħi, Quarkus huwa pjuttost konformi max-xejriet taż-żmien. L-iżvilupp tal-kodiċi backend qed isir aktar faċli u aktar faċli, u dan il-qafas jissimplifika u jħaffef aktar l-iżvilupp tas-servizz billi jżid appoġġ nattiv għal Docker u Kubernetes. Plus kbir huwa l-appoġġ integrat għal GraalVM u l-ġenerazzjoni ta 'immaġini li jiddependu mill-pjattaforma, li jippermetti li s-servizzi jibdew verament malajr u jieħdu ftit spazju għall-memorja. U dan huwa importanti ħafna fi żmienna ta 'passjoni tal-massa għal mikroservizzi u arkitettura bla server.
Sit uffiċjali -
Sors: www.habr.com