Nhanganyaya
Musi waKurume XNUMXth, RedHat (nenguva pfupi IBM)
Chinangwa ndechekuita kuti Java ive inotungamira puratifomu yeKubernetes kuendesa uye serverless application kusimudzira, ichipa vanogadzira nzira yakabatana yekusimudzira mune ese ari maviri anoshanda uye akakosha masitaera.
Kana iwe ukatarisa
Yakanyanya kumhanyisa yekumhanyisa application uye yakaderera ndangariro kushandiswa kwakavimbiswa. Heino data kubva pawebhusaiti yemugadziri:
Nguva kubva pakutanga kusvika yekutanga mhinduro (s):
Kugadziriswa
REST
REST+JPA
Quarkus+GraalVM
0.014
0.055
Quarkus+OpenJDK
0.75
2.5
Traditional Cloud Native Stack*
4.3
9.5
Memory kushandiswa (Mb):
Kugadziriswa
REST
REST+JPA
Quarkus+GraalVM
13
35
Quarkus+OpenJDK
74
130
Traditional Cloud Native Stack*
140
218
Zvinoshamisa, handizvo here?
*Ini handina kuwana chero ruzivo nezve iyi tekinoroji stack, tinogona kufunga kuti iyi ndeimwe mhando yeChitubu Boot ine imwe yekuwedzera muviri kit..
Mhoro Nyika!
Iyo yakapusa application yakanyorwa muQuarkus yaizotaridzika seizvi:
@Path("/hello")
public class GreetingResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return "hello";
}
}
Iri kirasi imwe chete uye zvakakwana! Iwe unogona kumhanya iyo application uchishandisa Maven mune yekuvandudza maitiro:
mvn compile quarkus:dev
β¦
$ curl http://localhost:8080/hello
hello
Musiyano kubva kune yakajairwa application ndeyekuti hapana kirasi yekushandisa! Quarkus inotsigira kupisa kurodha, saka unogona kushandura application yako usingaitengi, uchiita budiriro inokurumidza.
Chii chinotevera? Iwe unogona kuwedzera sevhisi kune controller uchishandisa annotation
@ApplicationScoped
public class GreetingService {
public String greeting(String name) {
return "Hello " + name + "!";
}
}
Controller:
@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!
Ziva kuti Quarkus inoshandisa akajairwa zvirevo kubva kune akajairwa masisitimu - CDI uye JAX-RS. Iko hakuna chikonzero chekudzidza chero chinhu chitsva kana wakamboshanda neCDI neJAX-RS kare, hongu.
Kushanda ne database
Hibernate uye yakajairwa JPA zvirevo zvemasangano zvinoshandiswa. Sezvakaita REST controllers, unofanirwa kunyora hushoma hwekodhi. Zvakakwana kuratidza zvinotsamira mugungano faira, wedzera zvirevo @Entity
uye gadzirisa datasource mukushandisa.properties.
Zvose. Hapana sessionFactory, persistence.xml kana mamwe mafaera esevhisi. Isu tinonyora chete kodhi inodiwa. Zvakadaro, kana zvichidikanwa, unogona kugadzira persistence.xml faira uye kugadzirisa ORM layer zvakanyanya.
Quarkus inotsigira caching yemasangano, kuunganidzwa kwehukama-kune-vakawanda, uye mibvunzo. Pakutanga kuona zvinotaridzika zvakanaka, asi ndizvo local caching, yeimwe Kubernetes node. Avo. Iwo ma cache emanode akasiyana haana kuwiriraniswa neimwe neimwe. Ndinovimba kuti izvi ndezvenguva pfupi.
Asynchronous code execution
Sezvambotaurwa pamusoro, Quarkus inotsigirawo reactive programming style. Iko kodhi yekushandiswa kwekare inogona kunyorwa mune imwe fomu.
@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 + "!";
});
}
}
Asynchronous kodhi inogona zvakare kuendeswa kune sevhisi, mhedzisiro ichave yakafanana.
Kuedza
Miedzo yeQuarkus application inogona kunyorwa muJUnit4 kana JUnit5. Pazasi pane bvunzo yekuyedza yekupedzisira, yakanyorwa uchishandisa RestAssured, asi imwe hurongwa inogona kushandiswa:
@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 + "!"));
}
}
Iyo @QuarkusTest annotation inokuraira kuti umhanye application usati waita bvunzo. Imwe yasara kodhi inozivikanwa kune vese vanogadzira.
Platform-specific application
Sezvo Quarkus yakanyatsobatanidzwa neGraalVM, zvinogoneka kugadzira kodhi-yakatarwa kodhi. Kuti uite izvi, unofanirwa kuisa GraalVM uye tsanangura iyo GRAALVM_HOME nharaunda inosiyana. Uyezve
mvn package -Pnative
Sezvineiwo, iyo yakagadzirwa application inogona kuyedzwa. Uye izvi zvakakosha nekuti kuitwa kwekodhi kodhi kunogona kusiyana nekuurayiwa paJVM. Iyo @SubstrateTest annotation inomhanya papuratifomu-chaiwo kodhi yekushandisa. Kushandisa zvakare bvunzo kodhi iripo inogona kuitwa uchishandisa nhaka; semhedzisiro, iyo kodhi yekuyedza-inotsamira papuratifomu application ichaita seizvi:
@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {
}
Mufananidzo wakagadzirwa unogona kuiswa muDocker uye unomhanya muKubernetes kana OpenShift, inotsanangurwa zvakadzama mukati
Zvishandiso
Iyo Quarkus framework inogona kushandiswa neMaven uye Gradle. Maven inotsigirwa zvizere, kusiyana neGradle. Nehurombo, parizvino Gradle haitsigire kugadzira purojekiti isina chinhu; kune ruzivo rwakadzama pane webhusaiti
Extensions
Quarkus chirongwa chinowedzera. Parizvino pane kurongeka
mhedziso
Sekuona kwangu, Quarkus inonyatso kuenderana nemaitiro enguva yacho. Backend kodhi kuvandudza kuri kuita nyore uye nyore, uye chimiro ichi chinowedzera kurerutsa uye nekumhanyisa kusimudzira sevhisi nekuwedzera rutsigiro rwemuno rweDocker uye Kubernetes. Iyo yakakura yekuwedzera ndeye yakavakirwa-mukati tsigiro yeGraalVM uye chizvarwa chepuratifomu-inotsamira mifananidzo, iyo inobvumira masevhisi kuti atange chaizvo nekukurumidza uye kutora diki ndangariro nzvimbo. Uye izvi zvakakosha munguva yedu yekushuvira kukuru kwemicroservices uye serverless architecture.
Nzvimbo yepamutemo -
Source: www.habr.com