
Nhanganyaya
Musi waKurume 7, RedHat (munguva pfupi ichava IBM) chimiro chitsva - . Sekureva kwevagadziri, chimiro ichi chakavakirwa paGraalVM uye OpenJDK HotSpot uye yakagadzirirwa Kubernetes. Iyo Quarkus stack inosanganisira: JPA/Hibernate, JAX-RS/RESTEasy, Eclipse Vert.x, Netty, Apache Camel, Kafka, Prometheus nevamwe.
Chinangwa chekugadzira ndechekuita Java iyo inotungamira chikuva cheKubernetes kuendesa uye serverless application kusimudzira, ichipa vanogadzira nzira yakabatana kune ese ari maviri anoshanda uye akakosha kusimudzira.
Kana iwe ukatarisa kupatsanurwa kwemafuremu, ipapo Quarkus iri pakati pe "Aggregators/Code Generators" uye "High-level fullstack frameworks". Iyo yatove yakawanda kupfuura aggregator, asi haisviki yakazara-stack, nekuti yakatarisana nekusimudzira kumashure.
Chikumbiro chakavimbiswa kuve nechakanyanya kumhanya kwekutanga uye yakaderera ndangariro kushandiswa. Heino data kubva pawebhusaiti yemugadziri:
Nguva kubva pakutanga kusvika yekutanga mhinduro (sec):
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, saka ndinofungidzira kuti imhando yeChitubu Boot ine mamwe mabhero uye muridzo..
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 chairo kirasi imwe uye ndizvozvo! Iwe unogona kumhanya iyo application uchishandisa Maven mune yekuvandudza maitiro:
mvn compile quarkus:dev
…
$ curl http://localhost:8080/hello
helloMusiyano kubva kune yakajairwa application ndeyekuti hapana kirasi yekushandisa! Quarkus inotsigira kupisa kurodha, saka iwe unogona kushandura iyo application pasina kuitangazve, nekudaro ichiita budiriro inokurumidza.
Chii chinotevera? Iwe unogona kuwedzera sevhisi kune controller uchishandisa annotation . Kodhi yebasa:
@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. Hapana chitsva chekudzidza, kana wakamboshanda neCDI neJAX-RS kare, hongu.
Kushanda ne database
Hibernate uye yakajairwa JPA zvirevo zvemasangano zvinoshandiswa. Sezvakaitika kune REST controllers, unofanirwa kunyora hushoma hwekodhi. Zvakakwana kutsanangura zvinotsamira mugungano faira, isa zvirevo @Entity uye gadzirisa iyo datasource mune application.properties.
Ndizvo. 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, izvi zvinotaridzika zvakanaka, asi zvakadaro local caching, yeimwe Kubernetes node. Ndiko kuti, ma cache emanode akasiyana haana kuwiriraniswa nemumwe. 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 kutamiswa kune sevhisi, mhedzisiro ichave yakafanana.
Kuedza
Miedzo yeQuarkus application inogona kunyorwa muJUnit4 kana JUnit5. Pazasi pane muenzaniso wekuyedzwa kwekugumisira, zvakanyorwa uchishandisa RestAssured, asi unogona kushandisa imwe hurongwa:
@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. Zvikasadaro, iyo kodhi inozivikanwa kune vese vanogadzira.
Platform-inotsamira application
Sezvo Quarkus yakanyatsobatanidzwa neGraalVM, zvinogoneka kugadzira kodhi-yakatarwa kodhi. Kuti uite izvi, unofanirwa kuisa GraalVM uye tsanangura iyo GRAALVM_HOME nharaunda inosiyana. Zvimwe uye tsanangura iyo paunenge uchigadzira application:
mvn package -PnativeSezvineiwo, iyo yakagadzirwa application inogona kuyedzwa. Uye izvi zvakakosha, nekuti kuitwa kweiyo "yenyika" kodhi inogona kusiyana nekuitwa paJVM. Iyo @SubstrateTest annotation inomhanya-inotsamira papuratifomu kodhi yekushandisa. Kushandisa zvakare iyo iripo bvunzo kodhi 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, sezvakatsanangurwa zvakadzama mu. .
Zvishandiso
Iyo Quarkus framework inogona kushandiswa neMaven uye Gradle. Maven inotsigirwa zvizere, kusiyana neGradle. Nehurombo, Gradle parizvino haitsigire kugadzira purojekiti isina chinhu, kune yakadzama gwara pane saiti .
Extensions
Quarkus chirongwa chinowedzera. Kune parizvino nezve , iyo inowedzera kushanda kwakasiyana-siyana - kubva pakutsigirwa и kutema matanda uye kutsikisa metrics ekufambisa masevhisi. Uye panotova nekuwedzera kwekutsigira zvinyorwa zvekunyora muKotlin, kuwedzera kuJava.
mhedziso
Sekuona kwangu, Quarkus inonyatso kuenderana nemaitiro enguva yacho. Backend kodhi kuvandudza kuri kuita nyore uye nyore, uye iyi dhizaini inorerutsa uye nekumhanyisa kusimudzira sevhisi zvakatonyanya, kuwedzera "yekuzvarwa" rutsigiro rweDocker uye Kubernetes. Iyo yakakura yekuwedzera ndeye yakavakirwa-mukati rutsigiro rweGraalVM uye chizvarwa chepuratifomu-inotsamira mifananidzo, iyo inokutendera iwe kuti uite masevhisi anotanga nekukasira uye anotora ndangariro shoma. Uye izvi zvakanyanya kukosha munguva yedu yekufarira kwakawanda kwema microservices uye serverless architecture.
Webhusaiti yepamutemo - . Mienzaniso yemapurojekiti ekukurumidza kutanga atobatidzwa .
Source: www.habr.com
