Cyflwyniad
Ar Fawrth XNUMX, RedHat (IBM yn fuan)
Y nod yw gwneud Java yn brif lwyfan ar gyfer defnyddio Kubernetes a datblygu cymwysiadau heb weinydd, gan ddarparu dull unedig i ddatblygwyr o ddatblygu mewn arddulliau adweithiol a hanfodol.
Os edrychwch ar
Addewir cyflymder uchel iawn o lansio cais a defnydd cof isel. Dyma'r data o wefan y datblygwr:
Amser o'r dechrau i'r ymateb(ion):
Ffurfweddiad
REST
REST+JPA
Quarkus+GraalVM
0.014
0.055
Quarkus+JDK Agored
0.75
2.5
Stack Brodorol Cwmwl Traddodiadol*
4.3
9.5
Defnydd cof (Mb):
Ffurfweddiad
REST
REST+JPA
Quarkus+GraalVM
13
35
Quarkus+JDK Agored
74
130
Stack Brodorol Cwmwl Traddodiadol*
140
218
Yn drawiadol, ynte?
*Ni wnes i ddod o hyd i unrhyw wybodaeth am y pentwr technoleg hwn, gallwn gymryd yn ganiataol mai rhyw fath o Spring Boot yw hwn gyda phecyn corff ychwanegol.
Helo Byd!
Byddai'r cais symlaf a ysgrifennwyd yn Quarkus yn edrych fel hyn:
@Path("/hello")
public class GreetingResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return "hello";
}
}
Yn llythrennol mae'n un dosbarth a dyna ddigon! Gallwch chi redeg y rhaglen gan ddefnyddio Maven yn y modd datblygu:
mvn compile quarkus:dev
β¦
$ curl http://localhost:8080/hello
hello
Y gwahaniaeth o gais rheolaidd yw nad oes dosbarth Cais! Mae Quarkus yn cefnogi ail-lwytho poeth, felly gallwch chi newid eich cais heb ei ailgychwyn, gan wneud datblygiad hyd yn oed yn gyflymach.
Beth sydd nesaf? Gallwch ychwanegu gwasanaeth at reolydd gan ddefnyddio anodiad
@ApplicationScoped
public class GreetingService {
public String greeting(String name) {
return "Hello " + name + "!";
}
}
Rheolydd:
@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!
Sylwch fod Quarkus yn defnyddio anodiadau safonol o fframweithiau cyfarwydd - CDI a JAX-RS. Nid oes angen dysgu unrhyw beth newydd os ydych wedi gweithio gyda CDI a JAX-RS o'r blaen, wrth gwrs.
Gweithio gyda'r gronfa ddata
Defnyddir anodiadau JPA safonol a gaeafgysgu ar gyfer endidau. Fel gyda rheolwyr REST, mae angen i chi ysgrifennu isafswm o god. Mae'n ddigon i nodi'r dibyniaethau yn y ffeil cydosod, ychwanegu anodiadau @Entity
a ffurfweddu ffynhonnell ddata yn application.properties.
I gyd. Dim sesiwnFactory, persistence.xml na ffeiliau gwasanaeth eraill. Rydym yn ysgrifennu dim ond y cod sydd ei angen. Fodd bynnag, os oes angen, gallwch greu ffeil persistence.xml a ffurfweddu'r haen ORM yn fwy manwl.
Mae Quarkus yn cefnogi storio endidau, casgliadau ar gyfer perthnasoedd un i lawer, ac ymholiadau. Ar yr olwg gyntaf mae'n edrych yn wych, ond mae'n lleol caching, am un nod Kubernetes. Y rhai. Nid yw caches gwahanol nodau wedi'u cydamseru Γ’'i gilydd. Rwy'n gobeithio mai dros dro yw hyn.
Gweithredu cod asyncronig
Fel y soniwyd uchod, mae Quarkus hefyd yn cefnogi'r arddull rhaglennu adweithiol. Gellir ysgrifennu cod y cais blaenorol mewn ffurf wahanol.
@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 + "!";
});
}
}
Gellir trosglwyddo cod asyncronig i'r gwasanaeth hefyd, bydd y canlyniad yr un peth.
Profi
Gellir ysgrifennu profion ar gyfer ceisiadau Quarkus yn JUnit4 neu JUnit5. Isod mae prawf enghreifftiol ar gyfer diweddbwynt, mae wedi'i ysgrifennu gan ddefnyddio RestAssured, ond gellir defnyddio fframwaith arall:
@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 + "!"));
}
}
Mae anodiad @QuarkusTest yn eich cyfarwyddo i redeg y rhaglen cyn rhedeg profion. Mae'r gweddill yn god sy'n gyfarwydd i bob datblygwr.
Cais platfform-benodol
Gan fod Quarkus wedi'i integreiddio'n dynn Γ’ GraalVM, wrth gwrs mae'n bosibl cynhyrchu cod platfform-benodol. I wneud hyn, mae angen i chi osod GraalVM a nodi'r newidyn amgylchedd GRALVM_HOME. Ymhellach
mvn package -Pnative
Yn ddiddorol, gellir profi'r cais a gynhyrchir. Ac mae hyn yn bwysig oherwydd gall gweithredu cod brodorol fod yn wahanol i weithredu ar y JVM. Mae anodiad @SubstrateTest yn rhedeg cod cymhwysiad platfform-benodol. Gellir ailddefnyddio cod prawf presennol gan ddefnyddio etifeddiaeth; o ganlyniad, bydd y cod ar gyfer profi cymhwysiad platfform-ddibynnol yn edrych fel hyn:
@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {
}
Gellir pecynnu'r ddelwedd a gynhyrchir yn Docker a'i rhedeg yn Kubernetes neu OpenShift, a ddisgrifir yn fanwl yn
Pecyn cymorth
Gellir defnyddio fframwaith Quarkus gyda Maven a Gradle. Mae Maven yn cael ei gefnogi'n llawn, yn wahanol i Gradle. Yn anffodus, ar hyn o bryd nid yw Gradle yn cefnogi cynhyrchu prosiect gwag; mae gwybodaeth fanwl ar y wefan
Estyniadau
Mae Quarkus yn fframwaith estynadwy. Ar hyn o bryd mae gorchymyn
Casgliad
Yn fy marn i, mae Quarkus yn hollol unol Γ’ thueddiadau'r amser. Mae datblygu cod backend yn dod yn haws ac yn haws, ac mae'r fframwaith hwn yn symleiddio ac yn cyflymu datblygiad gwasanaeth ymhellach trwy ychwanegu cefnogaeth frodorol i Docker a Kubernetes. Mantais enfawr yw'r gefnogaeth fewnol i GraalVM a chynhyrchu delweddau sy'n dibynnu ar blatfformau, sy'n caniatΓ‘u i wasanaethau ddechrau'n gyflym iawn a chymryd ychydig o le cof. Ac mae hyn yn bwysig iawn yn ein cyfnod o angerdd torfol am ficrowasanaethau a phensaernΓ―aeth ddi-weinydd.
Safle swyddogol -
Ffynhonnell: hab.com