Utangulizi
Mnamo Machi XNUMX, RedHat (hivi karibuni IBM)
Lengo ni kufanya Java kuwa jukwaa linaloongoza kwa uwekaji wa Kubernetes na ukuzaji wa programu bila seva, kuwapa wasanidi programu mbinu ya umoja ya maendeleo katika mitindo tendaji na ya lazima.
Ukiangalia
Kasi ya juu sana ya uzinduzi wa maombi na matumizi ya chini ya kumbukumbu yanaahidiwa. Hapa kuna data kutoka kwa wavuti ya msanidi programu:
Muda kutoka mwanzo hadi majibu ya kwanza:
Usanidi
WALIOBAKI
REST+JPA
Quarkus+GraalVM
0.014
0.055
Quarkus+OpenJDK
0.75
2.5
Rafu ya Asili ya Wingu*
4.3
9.5
Matumizi ya kumbukumbu (Mb):
Usanidi
WALIOBAKI
REST+JPA
Quarkus+GraalVM
13
35
Quarkus+OpenJDK
74
130
Rafu ya Asili ya Wingu*
140
218
Inavutia, sivyo?
*Sikupata taarifa yoyote kuhusu mrundikano huu wa teknolojia, tunaweza kudhani kuwa hii ni aina fulani ya Spring Boot iliyo na vifaa vya ziada vya mwili..
Salamu, Dunia!
Programu rahisi zaidi iliyoandikwa katika Quarkus ingeonekana kama hii:
@Path("/hello")
public class GreetingResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return "hello";
}
}
Ni darasa moja na inatosha! Unaweza kuendesha programu kwa kutumia Maven katika hali ya ukuzaji:
mvn compile quarkus:dev
β¦
$ curl http://localhost:8080/hello
hello
Tofauti kutoka kwa programu ya kawaida ni kwamba hakuna darasa la Maombi! Quarkus inasaidia upakiaji upya wa moto, kwa hivyo unaweza kubadilisha programu yako bila kuiwasha tena, na kufanya maendeleo kuwa haraka zaidi.
Nini kinafuata? Unaweza kuongeza huduma kwa kidhibiti kwa kutumia kidokezo
@ApplicationScoped
public class GreetingService {
public String greeting(String name) {
return "Hello " + name + "!";
}
}
Kidhibiti:
@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!
Kumbuka kwamba Quarkus hutumia maelezo ya kawaida kutoka kwa mifumo inayojulikana - CDI na JAX-RS. Hakuna haja ya kujifunza chochote kipya ikiwa umefanya kazi na CDI na JAX-RS hapo awali, bila shaka.
Kufanya kazi na hifadhidata
Hibernate na ufafanuzi wa kawaida wa JPA kwa vyombo hutumiwa. Kama ilivyo kwa vidhibiti vya REST, unahitaji kuandika kiwango cha chini cha msimbo. Inatosha kuonyesha utegemezi katika faili ya kusanyiko, ongeza maelezo @Entity
na usanidi chanzo cha data katika application.properties.
Wote. Hakuna sessionFactory, persistence.xml au faili nyingine za huduma. Tunaandika msimbo unaohitajika tu. Hata hivyo, ikiwa ni lazima, unaweza kuunda faili ya persistence.xml na kusanidi safu ya ORM vizuri zaidi.
Quarkus inasaidia uakibishaji wa huluki, mikusanyiko ya uhusiano wa moja hadi nyingi, na hoja. Kwa mtazamo wa kwanza inaonekana nzuri, lakini ni mitaa caching, kwa nodi moja ya Kubernetes. Wale. Cache za nodi tofauti hazijasawazishwa na kila mmoja. Natumai hii ni ya muda.
Utekelezaji wa nambari isiyolingana
Kama ilivyoelezwa hapo juu, Quarkus pia inasaidia mtindo tendaji wa programu. Nambari ya programu iliyotangulia inaweza kuandikwa kwa fomu tofauti.
@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 + "!";
});
}
}
Nambari ya Asynchronous pia inaweza kuhamishiwa kwenye huduma, matokeo yatakuwa sawa.
Upimaji
Majaribio ya maombi ya Quarkus yanaweza kuandikwa katika JUnit4 au JUnit5. Ifuatayo ni mfano wa jaribio la mwisho, imeandikwa kwa kutumia RestAssured, lakini mfumo mwingine unaweza kutumika:
@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 + "!"));
}
}
Ufafanuzi wa @QuarkusTest hukuelekeza kuendesha programu kabla ya kufanya majaribio. Mengine ni msimbo unaojulikana kwa watengenezaji wote.
Utumizi mahususi wa jukwaa
Kwa kuwa Quarkus imeunganishwa vizuri na GraalVM, bila shaka inawezekana kutoa msimbo mahususi wa jukwaa. Ili kufanya hivyo, unahitaji kusakinisha GraalVM na kutaja utofauti wa mazingira wa GRAALVM_HOME. Zaidi
mvn package -Pnative
Inafurahisha, programu inayozalishwa inaweza kujaribiwa. Na hii ni muhimu kwa sababu utekelezaji wa nambari ya asili inaweza kutofautiana na utekelezaji kwenye JVM. Ufafanuzi wa @SubstrateTest huendesha msimbo wa programu mahususi wa jukwaa. Kutumia tena nambari ya jaribio iliyopo inaweza kufanywa kwa kutumia urithi; kwa hivyo, nambari ya kujaribu programu inayotegemea jukwaa itaonekana kama hii:
@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {
}
Picha inayotokana inaweza kuwekwa kwenye Docker na kuendeshwa katika Kubernetes au OpenShift, iliyoelezwa kwa undani ndani
Chombo
Mfumo wa Quarkus unaweza kutumika na Maven na Gradle. Maven inaungwa mkono kikamilifu, tofauti na Gradle. Kwa bahati mbaya, kwa sasa Gradle haiungi mkono kutoa mradi tupu; kuna habari ya kina kwenye wavuti
Viongezeo
Quarkus ni mfumo unaopanuliwa. Hivi sasa kuna agizo
Hitimisho
Kwa maoni yangu, Quarkus inalingana kabisa na mwenendo wa wakati huo. Uundaji wa msimbo wa nyuma unakuwa rahisi na rahisi, na mfumo huu hurahisisha zaidi na kuharakisha utayarishaji wa huduma kwa kuongeza usaidizi asilia kwa Docker na Kubernetes. Faida kubwa ni usaidizi uliojengewa ndani wa GraalVM na utengenezaji wa picha zinazotegemea jukwaa, ambayo inaruhusu huduma kuanza haraka sana na kuchukua nafasi ndogo ya kumbukumbu. Na hii ni muhimu sana katika wakati wetu wa shauku kubwa kwa huduma ndogo na usanifu usio na seva.
Tovuti rasmi -
Chanzo: mapenzi.com