හැඳින්වීම
මාර්තු XNUMX වෙනිදා, RedHat (ඉක්මනින් IBM)
ප්රතික්රියාශීලී සහ අත්යවශ්ය ශෛලීන් දෙකෙන්ම සංවර්ධනය සඳහා සංවර්ධකයින්ට ඒකාබද්ධ ප්රවේශයක් ලබා දෙමින්, Kubernetes යෙදවීම සහ සේවාදායක රහිත යෙදුම් සංවර්ධනය සඳහා Java ප්රමුඛ වේදිකාව බවට පත් කිරීම මෙහි අරමුණයි.
බැලුවොත්
යෙදුම් දියත් කිරීමේ ඉතා ඉහළ වේගයක් සහ අඩු මතක පරිභෝජනයක් පොරොන්දු වේ. සංවර්ධකයාගේ වෙබ් අඩවියෙන් දත්ත මෙන්න:
ආරම්භයේ සිට පළමු ප්රතිචාර දක්වා කාලය (ය):
වින්යාසය
රෙස්ට්
REST+JPA
Quarkus+GraalVM
0.014
0.055
Quarkus+OpenJDK
0.75
2.5
සම්ප්රදායික වලාකුළු ස්වදේශීය තොගය*
4.3
9.5
මතක පරිභෝජනය (Mb):
වින්යාසය
රෙස්ට්
REST+JPA
Quarkus+GraalVM
13
35
Quarkus+OpenJDK
74
130
සම්ප්රදායික වලාකුළු ස්වදේශීය තොගය*
140
218
ආකර්ෂණීයයි නේද?
*මම මෙම තාක්ෂණ තොගය පිළිබඳ කිසිදු තොරතුරක් සොයා ගත්තේ නැත, මෙය අමතර ශරීර කට්ටලයක් සහිත යම් ආකාරයක Spring Boot එකක් යැයි අපට උපකල්පනය කළ හැකිය..
හෙලෝ වර්ල්ඩ්!
Quarkus හි ලියා ඇති සරලම යෙදුම මේ ආකාරයෙන් පෙනෙනු ඇත:
@Path("/hello")
public class GreetingResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return "hello";
}
}
එය වචනාර්ථයෙන් එක් පන්තියක් වන අතර එය ප්රමාණවත්ය! සංවර්ධන මාදිලියේ Maven භාවිතයෙන් ඔබට යෙදුම ධාවනය කළ හැකිය:
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 ස්තරය වඩාත් සියුම් ලෙස වින්යාසගත කළ හැක.
Quarkus ආයතනවල හැඹිලිගත කිරීම, එක සිට බොහෝ සම්බන්ධතා සඳහා එකතු කිරීම් සහ විමසුම් සඳහා සහය දක්වයි. මුලින්ම බැලූ බැල්මට එය විශිෂ්ටයි, නමුත් එය දේශීය එක් Kubernetes node එකක් සඳහා caching. එම. විවිධ නෝඩ් වල හැඹිලි එකිනෙක සමමුහුර්ත නොවේ. මෙය තාවකාලික යැයි මම බලාපොරොත්තු වෙමි.
අසමමුහුර්ත කේත ක්රියාත්මක කිරීම
ඉහත සඳහන් කළ පරිදි, Quarkus ද ප්රතික්රියාශීලී ක්රමලේඛන ශෛලිය සඳහා සහය දක්වයි. පෙර යෙදුමේ කේතය වෙනත් ආකාරයකින් ලිවිය හැකිය.
@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 + "!";
});
}
}
අසමමුහුර්ත කේතය ද සේවාවට මාරු කළ හැකිය, ප්රතිඵලය සමාන වනු ඇත.
පරීක්ෂා කිරීම
Quarkus යෙදුම් සඳහා වන පරීක්ෂණ 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 අනුසටහන මඟින් පරීක්ෂණ ධාවනය කිරීමට පෙර යෙදුම ධාවනය කිරීමට උපදෙස් දෙයි. ඉතිරිය සියලුම සංවර්ධකයින්ට හුරුපුරුදු කේතයකි.
වේදිකා-විශේෂිත යෙදුම
Quarkus GraalVM සමඟ දැඩි ලෙස ඒකාබද්ධ වී ඇති බැවින්, වේදිකාවට විශේෂිත කේතයක් උත්පාදනය කළ හැකිය. මෙය සිදු කිරීම සඳහා, ඔබ GraalVM ස්ථාපනය කර GRAALVM_HOME පරිසර විචල්යය සඳහන් කළ යුතුය. තව දුරටත්
mvn package -Pnative
උත්පාදනය කරන ලද යෙදුම පරීක්ෂා කළ හැකි වීම සිත්ගන්නා කරුණකි. තවද මෙය වැදගත් වන්නේ ස්වදේශීය කේතය ක්රියාත්මක කිරීම JVM මත ක්රියාත්මක කිරීමට වඩා වෙනස් විය හැකි බැවිනි. @SubstrateTest විවරණය වේදිකා-විශේෂිත යෙදුම් කේතය ධාවනය කරයි. පවතින පරීක්ෂණ කේතය නැවත භාවිතා කිරීම උරුමය භාවිතයෙන් සිදු කළ හැක; එහි ප්රතිඵලයක් වශයෙන්, වේදිකාව මත යැපෙන යෙදුමක් පරීක්ෂා කිරීමේ කේතය මේ ආකාරයෙන් පෙනෙනු ඇත:
@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {
}
ජනනය කරන ලද රූපය Docker හි ඇසුරුම් කර Kubernetes හෝ OpenShift හි ධාවනය කළ හැක, විස්තරාත්මකව විස්තර කර ඇත
මෙවලම්
ක්වාර්කස් රාමුව Maven සහ Gradle සමඟ භාවිතා කළ හැක. Gradle මෙන් නොව Maven සම්පූර්ණයෙන්ම සහාය දක්වයි. අවාසනාවකට, මේ මොහොතේ Gradle හිස් ව්යාපෘතියක් ජනනය කිරීමට සහාය නොදක්වයි; වෙබ් අඩවියේ සවිස්තරාත්මක තොරතුරු තිබේ
දිගු
Quarkus යනු විස්තීරණ රාමුවකි. දැනට ඇණවුමක් ඇත
නිගමනය
මගේ මතය අනුව, ක්වාර්කස් එකල ප්රවණතා සමඟ බෙහෙවින් ගැලපේ. පසුපෙළ කේත සංවර්ධනය පහසු සහ පහසු වෙමින් පවතින අතර, මෙම රාමුව Docker සහ Kubernetes සඳහා දේශීය සහය එක් කිරීමෙන් සේවා සංවර්ධනය තවදුරටත් සරල කර වේගවත් කරයි. විශාල ප්ලස් එකක් වන්නේ GraalVM සඳහා ගොඩනඟන ලද සහය සහ වේදිකා මත යැපෙන රූප උත්පාදනය කිරීම, සේවාවන් ඉතා ඉක්මනින් ආරම්භ කිරීමට සහ කුඩා මතක ඉඩක් ලබා ගැනීමට ඉඩ සලසයි. ක්ෂුද්ර සේවා සහ සේවාදායක රහිත ගෘහ නිර්මාණ ශිල්පය සඳහා අපගේ විශාල ආශාවේ කාලය තුළ මෙය ඉතා වැදගත් වේ.
නිල වෙබ් අඩවිය -
මූලාශ්රය: www.habr.com