Inngangur
Þann XNUMX. mars, RedHat (bráðum IBM)
Markmiðið er að gera Java að leiðandi vettvangi fyrir Kubernetes dreifingu og netþjónalausa forritaþróun, sem veitir forriturum sameinaða nálgun við þróun bæði í viðbragðs- og brýn stíl.
Horfa á
Það er lofað mjög miklum hraða við ræsingu forrita og lítilli minnisnotkun. Hér eru gögnin frá vefsíðu þróunaraðila:
Tími frá upphafi til fyrsta svars:
Stillingar
REST
REST+JPA
Quarkus+GraalVM
0.014
0.055
Quarkus+OpenJDK
0.75
2.5
Hefðbundinn skýjastafla*
4.3
9.5
Minnisnotkun (Mb):
Stillingar
REST
REST+JPA
Quarkus+GraalVM
13
35
Quarkus+OpenJDK
74
130
Hefðbundinn skýjastafla*
140
218
Áhrifamikið, er það ekki?
*Ég fann engar upplýsingar um þennan tæknistafla, við getum gert ráð fyrir að þetta sé einhvers konar Spring Boot með viðbótar líkamsbúnaði.
Halló heimur!
Einfaldasta forritið sem skrifað er í Quarkus myndi líta svona út:
@Path("/hello")
public class GreetingResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return "hello";
}
}
Það er bókstaflega einn flokkur og það er nóg! Þú getur keyrt forritið með Maven í þróunarham:
mvn compile quarkus:dev
…
$ curl http://localhost:8080/hello
hello
Munurinn frá venjulegri umsókn er að það er enginn umsóknarflokkur! Quarkus styður heita endurhleðslu, svo þú getur breytt forritinu þínu án þess að endurræsa það, sem gerir þróunina enn hraðari.
Hvað er næst? Þú getur bætt þjónustu við stjórnanda með því að nota athugasemd
@ApplicationScoped
public class GreetingService {
public String greeting(String name) {
return "Hello " + name + "!";
}
}
Stjórnandi:
@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!
Athugaðu að Quarkus notar staðlaðar athugasemdir frá kunnuglegum ramma - CDI og JAX-RS. Það er engin þörf á að læra neitt nýtt ef þú hefur unnið með CDI og JAX-RS áður, auðvitað.
Vinna með gagnagrunninn
Notast er við dvala og staðlaða JPA skýringar fyrir aðila. Eins og með REST stýringar þarftu að skrifa lágmarks kóða. Það er nóg að gefa til kynna ósjálfstæðin í samsetningarskránni, bæta við athugasemdum @Entity
og stilltu gagnagjafa í application.properties.
Allt. Engar sessionFactory, persistence.xml eða aðrar þjónustuskrár. Við skrifum aðeins kóðann sem þarf. Hins vegar, ef nauðsyn krefur, geturðu búið til persistence.xml skrá og stillt ORM lagið fínnar.
Quarkus styður skyndiminni eininga, söfn fyrir einn á marga sambönd og fyrirspurnir. Við fyrstu sýn lítur það vel út, en það er það staðbundin skyndiminni, fyrir einn Kubernetes hnút. Þeir. Skyndiminni mismunandi hnúta eru ekki samstillt hver við annan. Ég vona að þetta sé tímabundið.
Ósamstilltur kóða framkvæmd
Eins og getið er hér að ofan styður Quarkus einnig viðbragðsforritunarstílinn. Hægt er að skrifa kóðann fyrir fyrri umsókn á öðru formi.
@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 + "!";
});
}
}
Einnig er hægt að flytja ósamstilltan kóða yfir á þjónustuna, niðurstaðan verður sú sama.
Prófun
Próf fyrir Quarkus forrit er hægt að skrifa í JUnit4 eða JUnit5. Hér að neðan er dæmi um próf fyrir endapunkt, það er skrifað með RestAssured, en hægt er að nota annan ramma:
@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 skýringin gefur þér fyrirmæli um að keyra forritið áður en þú keyrir próf. Restin er kóða sem allir forritarar þekkja.
Pallsértækt forrit
Þar sem Quarkus er þétt samþætt við GraalVM er auðvitað hægt að búa til vettvangssértækan kóða. Til að gera þetta þarftu að setja upp GraalVM og tilgreina GRAALVM_HOME umhverfisbreytuna. Frekari
mvn package -Pnative
Athyglisvert er að hægt er að prófa forritið sem er búið til. Og þetta er mikilvægt vegna þess að framkvæmd innfædds kóða getur verið frábrugðin framkvæmd á JVM. @SubstrateTest skýringin keyrir vettvangssértækan forritakóða. Hægt er að endurnýta núverandi prófunarkóða með því að nota arfleifð; þar af leiðandi mun kóðinn til að prófa vettvangsháð forrit líta svona út:
@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {
}
Myndinni er hægt að pakka í Docker og keyra hana í Kubernetes eða OpenShift, lýst í smáatriðum í
Verkfæri
Quarkus ramma er hægt að nota með Maven og Gradle. Maven er að fullu studd, ólíkt Gradle. Því miður, í augnablikinu styður Gradle ekki að búa til tómt verkefni; það eru nákvæmar upplýsingar á vefsíðunni
Viðbyggingar
Quarkus er teygjanlegur rammi. Eins og er er pöntun
Ályktun
Að mínu mati er Quarkus alveg í takt við stefnur þess tíma. Þróun bakendakóða er að verða auðveldari og auðveldari og þessi rammi einfaldar og flýtir enn frekar fyrir þjónustuþróun með því að bæta við innbyggðum stuðningi fyrir Docker og Kubernetes. Stór plús er innbyggður stuðningur við GraalVM og myndun vettvangsháðra mynda, sem gerir þjónustu kleift að byrja mjög hratt og taka lítið minnisrými. Og þetta er mjög mikilvægt á tímum fjöldaástríðu okkar fyrir örþjónustu og netþjónalausum arkitektúr.
Opinber síða -
Heimild: www.habr.com