Pîrozbahiyê
Di XNUMX-ê Adarê de, RedHat (zû IBM)
Armanc ev e ku Java bibe platforma pêşeng ji bo bicihkirina Kubernetes û pêşkeftina serîlêdana bê server, ji pêşdebiran re nêzîkatiyek yekgirtî ya pêşkeftinê hem di şêwazên reaktîf û hem jî mecbûrî de peyda dike.
Dinêre
Leza pir zêde ya destpêkirina serîlêdanê û mezaxtina bîra kêm tê soz kirin. Li vir daneyên ji malpera pêşdebirker e:
Dem ji destpêkê heya bersiva yekem (s):
Guhertin
REHETÎ
REST + JPA
Quarkus + GraalVM
0.014
0.055
Quarkus+OpenJDK
0.75
2.5
Cloud Native Stack*
4.3
9.5
Vexwarina bîranînê (Mb):
Guhertin
REHETÎ
REST + JPA
Quarkus + GraalVM
13
35
Quarkus+OpenJDK
74
130
Cloud Native Stack*
140
218
Balkêş e, ne wusa?
*Min di derheqê vê stoka teknolojiyê de ti agahdarî nedît, em dikarin texmîn bikin ku ev celebek Boota Biharê ye ku bi kîtek laşê zêde ye.
Hello World!
Serîlêdana herî hêsan a ku li Quarkus hatî nivîsandin dê bi vî rengî xuya bike:
@Path("/hello")
public class GreetingResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return "hello";
}
}
Bi rastî yek pola ye û bes e! Hûn dikarin serîlêdanê bi karanîna Maven di moda pêşkeftinê de bimeşînin:
mvn compile quarkus:dev
…
$ curl http://localhost:8080/hello
hello
Cûdahiya ji serîlêdana birêkûpêk ev e ku pola Serlêdanê tune! Quarkus ji nûvekirina germ piştgirî dike, ji ber vê yekê hûn dikarin serîlêdana xwe bêyî destpêkirina wê biguhezînin, pêşveçûnê hîn zûtir bikin.
Pêşî çi ye? Hûn dikarin bi karanîna annotasyonê karûbarek li kontrolkerek zêde bikin
@ApplicationScoped
public class GreetingService {
public String greeting(String name) {
return "Hello " + name + "!";
}
}
Kontrolker:
@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!
Bala xwe bidinê ku Quarkus annotasyonên standard ji çarçoveyên naskirî - CDI û JAX-RS bikar tîne. Ger we berê bi CDI û JAX-RS re xebitîbe ne hewce ye ku hûn tiştek nû fêr bibin, bê guman.
Bi databasê re dixebitin
Hibernate û şîroveyên standard JPA ji bo saziyan têne bikar anîn. Mîna kontrolkerên REST, hûn hewce ne ku hindiktirîn kodê binivîsin. Bes e ku meriv pêwendiyan di pelê civînê de destnîşan bike, şîroveyan lê zêde bike @Entity
û datasource di application.properties de mîheng bike.
Gişt. SesionFactory, persistence.xml an pelên karûbarê din tune. Em tenê koda ku hewce dike dinivîsin. Lêbelê, heke hewce be, hûn dikarin pelek persistence.xml biafirînin û qata ORM-ê bi hûrgulî mîheng bikin.
Quarkus cachkirina saziyan, berhevokên ji bo têkiliyên yek-bi-gelek, û pirsan piştgirî dike. Di nihêrîna pêşîn de ew pir xweş xuya dike, lê ew e herêmî caching, ji bo yek girêk Kubernetes. Ewan. Kevirên girêkên cihêreng bi hevûdu re ne hevdemkirî ne. Ez hêvî dikim ku ev demkî ye.
Darvekirina koda asynchronous
Wekî ku li jor behs kir, Quarku di heman demê de şêwaza bernameya reaktîf jî piştgirî dike. Koda serîlêdana berê dikare bi rengek cûda were nivîsandin.
@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 + "!";
});
}
}
Koda asynchronous jî dikare ji karûbar re were veguheztin, encam dê heman be.
Îmtîhanê
Testên ji bo serîlêdanên Quarkus dikarin di JUnit4 an JUnit5 de bêne nivîsandin. Li jêr ceribandinek mînakek ji bo xalek dawî ye, ew bi karanîna RestAssured hatî nivîsandin, lê çarçoveyek din dikare were bikar anîn:
@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 + "!"));
}
}
Şîrovekirina @QuarkusTest ji we re rê dide ku hûn berî ceribandinan serîlêdanê bimeşînin. Ya mayî kodek e ku ji hemî pêşdebiran re nas e.
Serlêdana platform-taybet
Ji ber ku Quarkus bi GraalVM-ê re zexm ve girêdayî ye, bê guman gengaz e ku koda platformê-taybetî biafirîne. Ji bo vê yekê, hûn hewce ne ku GraalVM saz bikin û guhêrbara jîngehê GRAALVM_HOME diyar bikin. Berdewam
mvn package -Pnative
Balkêş e, serîlêdana hatî çêkirin dikare were ceribandin. Û ev girîng e ji ber ku darvekirina koda xwemalî dibe ku ji darvekirina li ser JVM cûda bibe. Şîrovekirina @SubstrateTest koda serîlêdanê ya platform-taybet dimeşîne. Ji nû ve karanîna koda testê ya heyî dikare bi karanîna mîrasiyê were kirin; Wekî encamek, koda ceribandina serîlêdana girêdayî platformê dê bi vî rengî xuya bike:
@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {
}
Wêneyê hatî hilberandin dikare li Docker were pak kirin û di Kubernetes an OpenShift de were xebitandin, bi hûrgulî li
Amûr
Çarçoveya Quarkus dikare bi Maven û Gradle re were bikar anîn. Maven bi tevahî piştgirî ye, berevajî Gradle. Mixabin, niha Gradle piştgirî nade çêkirina projeyek vala; li ser malperê agahdariya berfireh heye
Extensions
Quarkus çarçoveyek berfirehkirî ye. Niha fermanek heye
encamê
Bi dîtina min, Quarkus bi meylên demê re pir li hev e. Pêşveçûna koda paşerojê hêsantir û hêsantir dibe, û ev çarçove bi lê zêdekirina piştevaniya xwemalî ya ji bo Docker û Kubernetes re pêşkeftina karûbarê hêsantir dike û bileztir dike. Pîvanek mezin piştgirîya çêkirî ya ji bo GraalVM û hilberîna wêneyên girêdayî platformê ye, ku dihêle karûbar bi rastî zû dest pê bikin û cîhê bîranîna piçûk bigirin. Û ev di dema meya dilşewatiya girseyî ya ji bo mîkroxizmet û mîmariya bê server de pir girîng e.
Malpera fermî -
Source: www.habr.com