పరిచయం
మార్చి XNUMXన, RedHat (త్వరలో IBM)
కుబెర్నెట్స్ డిప్లాయ్మెంట్ మరియు సర్వర్లెస్ అప్లికేషన్ డెవలప్మెంట్ కోసం జావాను ప్రముఖ ప్లాట్ఫారమ్గా మార్చడమే లక్ష్యం, డెవలపర్లకు రియాక్టివ్ మరియు ఇంపెరేటివ్ స్టైల్లలో అభివృద్ధి చేయడానికి ఏకీకృత విధానాన్ని అందించడం.
మీరు చూస్తే
అప్లికేషన్ లాంచ్ యొక్క అధిక వేగం మరియు తక్కువ మెమరీ వినియోగం హామీ ఇవ్వబడ్డాయి. డెవలపర్ వెబ్సైట్ నుండి డేటా ఇక్కడ ఉంది:
ప్రారంభం నుండి మొదటి ప్రతిస్పందన వరకు సమయం (లు):
ఆకృతీకరణ
REST
REST+JPA
Quarkus+GraalVM
0.014
0.055
Quarkus+OpenJDK
0.75
2.5
సాంప్రదాయ క్లౌడ్ స్థానిక స్టాక్*
4.3
9.5
మెమరీ వినియోగం (Mb):
ఆకృతీకరణ
REST
REST+JPA
Quarkus+GraalVM
13
35
Quarkus+OpenJDK
74
130
సాంప్రదాయ క్లౌడ్ స్థానిక స్టాక్*
140
218
ఆకట్టుకునేలా ఉంది, కాదా?
*నేను ఈ టెక్నాలజీ స్టాక్ గురించి ఎలాంటి సమాచారం కనుగొనలేదు, ఇది అదనపు బాడీ కిట్తో కూడిన ఒక రకమైన స్ప్రింగ్ బూట్ అని మేము ఊహించవచ్చు.
హలో వరల్డ్!
క్వార్కస్లో వ్రాయబడిన సరళమైన అప్లికేషన్ ఇలా ఉంటుంది:
@Path("/hello")
public class GreetingResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return "hello";
}
}
ఇది అక్షరాలా ఒక తరగతి మరియు అది సరిపోతుంది! మీరు డెవలప్మెంట్ మోడ్లో మావెన్ని ఉపయోగించి అప్లికేషన్ను అమలు చేయవచ్చు:
mvn compile quarkus:dev
…
$ curl http://localhost:8080/hello
hello
సాధారణ అప్లికేషన్ నుండి తేడా ఏమిటంటే అప్లికేషన్ క్లాస్ లేదు! Quarkus హాట్ రీలోడ్కి మద్దతు ఇస్తుంది, కాబట్టి మీరు మీ అప్లికేషన్ను పునఃప్రారంభించకుండానే మార్చవచ్చు, అభివృద్ధిని మరింత వేగవంతం చేస్తుంది.
తరవాత ఏంటి? మీరు ఉల్లేఖనాన్ని ఉపయోగించి కంట్రోలర్కు సేవను జోడించవచ్చు
@ApplicationScoped
public class GreetingService {
public String greeting(String name) {
return "Hello " + name + "!";
}
}
కంట్రోలర్:
@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!
క్వార్కస్ సుపరిచితమైన ఫ్రేమ్వర్క్ల నుండి ప్రామాణిక ఉల్లేఖనాలను ఉపయోగిస్తుందని గమనించండి - CDI మరియు JAX-RS. మీరు ఇంతకు ముందు CDI మరియు JAX-RSతో పని చేసి ఉంటే కొత్తగా ఏమీ నేర్చుకోవాల్సిన అవసరం లేదు.
డేటాబేస్తో పని చేస్తోంది
ఎంటిటీల కోసం హైబర్నేట్ మరియు ప్రామాణిక JPA ఉల్లేఖనాలు ఉపయోగించబడతాయి. REST కంట్రోలర్ల మాదిరిగా, మీరు కనీసం కోడ్ని వ్రాయాలి. అసెంబ్లీ ఫైల్లోని డిపెండెన్సీలను సూచించడం, ఉల్లేఖనాలను జోడించడం సరిపోతుంది @Entity
మరియు application.propertiesలో డేటాసోర్స్ను కాన్ఫిగర్ చేయండి.
అన్నీ. sessionFactory, persistence.xml లేదా ఇతర సర్వీస్ ఫైల్లు లేవు. మేము అవసరమైన కోడ్ను మాత్రమే వ్రాస్తాము. అయితే, అవసరమైతే, మీరు persistence.xml ఫైల్ను సృష్టించవచ్చు మరియు ORM లేయర్ను మరింత చక్కగా కాన్ఫిగర్ చేయవచ్చు.
క్వార్కస్ ఎంటిటీల కాషింగ్, ఒకటి నుండి అనేక సంబంధాల కోసం సేకరణలు మరియు ప్రశ్నలకు మద్దతు ఇస్తుంది. మొదటి చూపులో ఇది చాలా బాగుంది, కానీ అది స్థానిక ఒక కుబెర్నెట్స్ నోడ్ కోసం కాషింగ్. ఆ. వివిధ నోడ్ల కాష్లు ఒకదానితో ఒకటి సమకాలీకరించబడవు. ఇది తాత్కాలికమేనని నేను ఆశిస్తున్నాను.
అసమకాలిక కోడ్ అమలు
పైన పేర్కొన్నట్లుగా, క్వార్కస్ రియాక్టివ్ ప్రోగ్రామింగ్ శైలికి కూడా మద్దతు ఇస్తుంది. మునుపటి అప్లికేషన్ యొక్క కోడ్ వేరే రూపంలో వ్రాయబడుతుంది.
@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 + "!";
});
}
}
అసమకాలిక కోడ్ కూడా సేవకు బదిలీ చేయబడుతుంది, ఫలితం ఒకే విధంగా ఉంటుంది.
పరీక్ష
క్వార్కస్ అప్లికేషన్ల కోసం పరీక్షలు JUnit4 లేదా JUnit5లో రాయవచ్చు. ఎండ్ పాయింట్ కోసం ఒక ఉదాహరణ పరీక్ష క్రింద ఉంది, ఇది RestAssured ఉపయోగించి వ్రాయబడింది, కానీ మరొక ఫ్రేమ్వర్క్ను ఉపయోగించవచ్చు:
@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 + "!"));
}
}
@QuarkusTest ఉల్లేఖన పరీక్షలను అమలు చేయడానికి ముందు అప్లికేషన్ను అమలు చేయమని మిమ్మల్ని నిర్దేశిస్తుంది. మిగిలినవి డెవలపర్లందరికీ తెలిసిన కోడ్.
ప్లాట్ఫారమ్-నిర్దిష్ట అప్లికేషన్
క్వార్కస్ GraalVMతో గట్టిగా అనుసంధానించబడినందున, ప్లాట్ఫారమ్-నిర్దిష్ట కోడ్ని రూపొందించడం సాధ్యమవుతుంది. దీన్ని చేయడానికి, మీరు GraalVMని ఇన్స్టాల్ చేయాలి మరియు GRAALVM_HOME ఎన్విరాన్మెంట్ వేరియబుల్ను పేర్కొనాలి. ఇంకా
mvn package -Pnative
ఆసక్తికరంగా, రూపొందించబడిన అప్లికేషన్ను పరీక్షించవచ్చు. మరియు ఇది ముఖ్యమైనది ఎందుకంటే స్థానిక కోడ్ అమలు JVMలో అమలు నుండి భిన్నంగా ఉండవచ్చు. @SubstrateTest ఉల్లేఖన ప్లాట్ఫారమ్-నిర్దిష్ట అప్లికేషన్ కోడ్ని అమలు చేస్తుంది. ఇప్పటికే ఉన్న పరీక్ష కోడ్ని తిరిగి ఉపయోగించడం వారసత్వాన్ని ఉపయోగించి చేయవచ్చు; ఫలితంగా, ప్లాట్ఫారమ్-ఆధారిత అప్లికేషన్ను పరీక్షించే కోడ్ ఇలా కనిపిస్తుంది:
@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {
}
రూపొందించబడిన చిత్రాన్ని డాకర్లో ప్యాక్ చేయవచ్చు మరియు కుబెర్నెట్స్ లేదా ఓపెన్షిఫ్ట్లో అమలు చేయవచ్చు, ఇందులో వివరంగా వివరించబడింది
టూల్స్
క్వార్కస్ ఫ్రేమ్వర్క్ను మావెన్ మరియు గ్రేడిల్తో ఉపయోగించవచ్చు. Gradle వలె కాకుండా Maven పూర్తిగా మద్దతునిస్తుంది. దురదృష్టవశాత్తు, ప్రస్తుతానికి Gradle ఒక ఖాళీ ప్రాజెక్ట్ను రూపొందించడానికి మద్దతు ఇవ్వదు; వెబ్సైట్లో వివరణాత్మక సమాచారం ఉంది
విస్తరణ
క్వార్కస్ అనేది విస్తరించదగిన ఫ్రేమ్వర్క్. ప్రస్తుతం ఆర్డర్ ఉంది
తీర్మానం
నా అభిప్రాయం ప్రకారం, క్వార్కస్ ఆ కాలపు ట్రెండ్లకు అనుగుణంగా ఉంది. బ్యాకెండ్ కోడ్ డెవలప్మెంట్ సులభంగా మరియు సులభంగా మారుతోంది మరియు ఈ ఫ్రేమ్వర్క్ డాకర్ మరియు కుబెర్నెట్లకు స్థానిక మద్దతును జోడించడం ద్వారా సేవా అభివృద్ధిని మరింత సులభతరం చేస్తుంది మరియు వేగవంతం చేస్తుంది. గ్రాల్విఎమ్కి అంతర్నిర్మిత మద్దతు మరియు ప్లాట్ఫారమ్-ఆధారిత చిత్రాల తరం ఒక భారీ ప్లస్, ఇది సేవలను త్వరగా ప్రారంభించేందుకు మరియు తక్కువ మెమరీ స్థలాన్ని తీసుకోవడానికి అనుమతిస్తుంది. మరియు మైక్రోసర్వీసెస్ మరియు సర్వర్లెస్ ఆర్కిటెక్చర్ పట్ల మాస్ ప్యాషన్లో ఇది చాలా ముఖ్యమైనది.
అధికారిక సైట్ -
మూలం: www.habr.com