Inleiding
XNUMX Maart, RedHat (binnekort - IBM)
Die doel van die skepping is om Java die toonaangewende platform vir Kubernetes-ontplooiing en ontwikkeling van bedienerlose toepassings te maak, wat ontwikkelaars 'n verenigde benadering tot ontwikkeling in beide reaktiewe en noodsaaklike style bied.
Kyk na
Beloof 'n baie hoë toepassing opstartspoed en lae geheueverbruik. Hier is die data van die ontwikkelaar se webwerf:
Tyd van begin tot eerste reaksie(s):
opset
REST
RUS+JPA
Quarkus + GraalVM
0.014
0.055
Quarkus+OpenJDK
0.75
2.5
Tradisionele wolk-inheemse stapel*
4.3
9.5
Geheueverbruik (Mb):
opset
REST
RUS+JPA
Quarkus + GraalVM
13
35
Quarkus+OpenJDK
74
130
Tradisionele wolk-inheemse stapel*
140
218
Indrukwekkend, is dit nie?
*Ek het nie inligting oor hierdie tegnologiestapel gekry nie, ons kan aanvaar dat dit 'n soort Spring Boot is met 'n bykomende liggaamstel.
Hello Wêreld!
Die eenvoudigste toepassing wat in Quarkus geskryf is, sal soos volg lyk:
@Path("/hello")
public class GreetingResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return "hello";
}
}
Dit is letterlik een klas en dit is genoeg! U kan die toepassing met Maven in ontwikkelingsmodus laat loop:
mvn compile quarkus:dev
…
$ curl http://localhost:8080/hello
hello
Die verskil van die gewone toepassing is dat daar geen toepassingsklas is nie! Quarkus ondersteun warm herlaai, sodat jy die toepassing kan verander sonder om dit weer te begin, en sodoende ontwikkeling selfs vinniger maak.
Wat is volgende? U kan 'n diens by die beheerder voeg deur 'n aantekening te gebruik
@ApplicationScoped
public class GreetingService {
public String greeting(String name) {
return "Hello " + name + "!";
}
}
Beheerder:
@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!
Let daarop dat Quarkus standaardaantekeninge van bekende raamwerke gebruik - CDI en JAX-RS. Daar is natuurlik niks nuuts om te leer as jy voorheen met CDI en JAX-RS gewerk het nie.
Werk met die databasis
Gebruik deur Hibernate en standaard JPA-entiteitaantekeninge. Soos met REST-beheerders, moet jy 'n minimum kode skryf. Dit is genoeg om afhanklikhede in die samestellinglêer te spesifiseer, aantekeninge te plaas @Entity
en stel databron op in application.properties.
Almal. Geen sessionFactory, persistence.xml en ander dienslêers nie. Ons skryf slegs die kode wat nodig is. Indien nodig, kan jy egter 'n persistence.xml-lêer skep en die ORM-laag verfyn.
Quarkus ondersteun kas van entiteite, versamelings vir een-tot-veel verhoudings en navrae. Met die eerste oogopslag lyk dit wonderlik, maar dit plaaslike kas, vir 'n enkele Kubernetes-nodus. Dié. kas van verskillende nodusse word nie met mekaar gesinchroniseer nie. Ek hoop dit is tydelik.
Asinchroniese kode uitvoering
Soos hierbo genoem, ondersteun Quarkus ook 'n reaktiewe programmeringstyl. Die kode van die vorige aansoek kan in 'n ander vorm geskryf word.
@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 + "!";
});
}
}
Asinchroniese kode kan ook na 'n diens geskuif word, die resultaat sal dieselfde wees.
toets
Toetse vir Quarkus-toepassings kan in JUnit4 of JUnit5 geskryf word. Hieronder is 'n voorbeeldtoets vir 'n eindpunt, geskryf met RestAssured, maar ander raamwerke kan gebruik word:
@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 + "!"));
}
}
Die @QuarkusTest-aantekening gee opdrag om die toepassing te laat loop voordat die toetse uitgevoer word. Die res is kode wat aan alle ontwikkelaars bekend is.
Platform-spesifieke toepassing
Aangesien Quarkus stewig geïntegreer is met GraalVM, is dit natuurlik moontlik om inheemse kode te genereer. Om dit te doen, moet jy GraalVM installeer en die GRAALVM_HOME omgewingsveranderlike spesifiseer. Verder
mvn package -Pnative
Interessant genoeg kan die gegenereerde toepassing getoets word. En dit is belangrik, want die uitvoering van inheemse kode kan verskil van die uitvoering op die JVM. Die @SubstrateTest-aantekening loop inheemse toepassingskode uit. Die hergebruik van die bestaande toetskode kan met oorerwing gedoen word, gevolglik sal die kode vir die toets van 'n platformspesifieke toepassing soos volg lyk:
@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {
}
Die gegenereerde beeld kan in Docker verpak word en in Kubernetes of OpenShift uitgevoer word, in detail beskryf in
Gereedskap
Die Quarkus-raamwerk kan met Maven en Gradle gebruik word. Maven word ten volle ondersteun, anders as Gradle. Ongelukkig, op die oomblik dat Gradle nie die generering van 'n leë projek ondersteun nie, het die webwerf 'n gedetailleerde
uitbreiding
Quarkus is 'n uitbreidbare raamwerk. Op die oomblik is daar ongeveer
Gevolgtrekking
Quarkus is myns insiens nogal in die tendense van die tyd. Die ontwikkeling van backend-kode word makliker en makliker, en hierdie raamwerk vereenvoudig en versnel diensontwikkeling selfs meer deur inheemse ondersteuning vir Docker en Kubernetes by te voeg. ’n Groot pluspunt is die ingeboude ondersteuning vir GraalVM en die generering van platformspesifieke beelde, wat jou toelaat om dienste baie vinnig te laat begin en min geheuespasie op te neem. En dit is baie belangrik in ons tyd van massa-entoesiasme vir mikrodienste en bedienerlose argitektuur.
Amptelike webwerf -
Bron: will.com