مقدمة
في XNUMX مارس، RedHat (قريبًا IBM)
الهدف هو جعل Java النظام الأساسي الرائد لنشر Kubernetes وتطوير التطبيقات بدون خادم، مما يوفر للمطورين نهجًا موحدًا للتطوير في كل من الأنماط التفاعلية والحتمية.
انظر الى
يتم الوعد بسرعة عالية جدًا في تشغيل التطبيق واستهلاك منخفض للذاكرة. وهذه هي البيانات من موقع المطور:
الوقت من البداية إلى الرد (الردود) الأول:
ترتيب
REST
الراحة + JPA
كواركوس+GraalVM
0.014
0.055
كواركوس + OpenJDK
0.75
2.5
المكدس الأصلي للسحابة التقليدية*
4.3
9.5
استهلاك الذاكرة (ميجابايت):
ترتيب
REST
الراحة + JPA
كواركوس+GraalVM
13
35
كواركوس + 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!
لاحظ أن Quarkus يستخدم التعليقات التوضيحية القياسية من أطر عمل مألوفة - CDI وJAX-RS. ليست هناك حاجة لتعلم أي شيء جديد إذا كنت قد عملت مع CDI وJAX-RS من قبل بالطبع.
العمل مع قاعدة البيانات
يتم استخدام التعليقات التوضيحية للإسبات وJPA القياسية للكيانات. كما هو الحال مع وحدات تحكم REST، تحتاج إلى كتابة الحد الأدنى من التعليمات البرمجية. يكفي الإشارة إلى التبعيات في ملف التجميع وإضافة التعليقات التوضيحية @Entity
وتكوين مصدر البيانات في application.properties.
الجميع. لا توجد ملفات sessionFactory أو استمرارية.xml أو ملفات خدمة أخرى. نكتب فقط الكود المطلوب. ومع ذلك، إذا لزم الأمر، يمكنك إنشاء ملف Persistence.xml وتكوين طبقة ORM بشكل أكثر دقة.
يدعم Quarkus التخزين المؤقت للكيانات والمجموعات لعلاقات رأس بأطراف والاستعلامات. للوهلة الأولى يبدو الأمر رائعًا، لكنه كذلك محلي التخزين المؤقت لعقدة Kubernetes واحدة. أولئك. لا تتم مزامنة ذاكرات التخزين المؤقت للعقد المختلفة مع بعضها البعض. آمل أن يكون هذا مؤقتا.
تنفيذ التعليمات البرمجية غير المتزامنة
كما ذكرنا سابقًا، يدعم 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، كما هو موضح بالتفصيل في
أدوات
يمكن استخدام إطار عمل Quarkus مع Maven وGradle. Maven مدعوم بالكامل، على عكس Gradle. لسوء الحظ، في الوقت الحالي لا يدعم Gradle إنشاء مشروع فارغ؛ هناك معلومات مفصلة على الموقع
توسع
Quarkus هو إطار قابل للتوسيع. حاليا هناك أمر
اختتام
في رأيي، Quarkus يتماشى تمامًا مع اتجاهات العصر. أصبح تطوير كود الواجهة الخلفية أسهل فأسهل، ويعمل إطار العمل هذا على تبسيط وتسريع تطوير الخدمة من خلال إضافة دعم أصلي لـ Docker وKubernetes. الميزة الإضافية الكبيرة هي الدعم المدمج لـ GraalVM وإنشاء الصور المعتمدة على النظام الأساسي، مما يسمح ببدء الخدمات بسرعة كبيرة ويشغل مساحة صغيرة من الذاكرة. وهذا مهم جدًا في عصرنا الذي يشهد شغفًا كبيرًا بالخدمات الصغيرة والهندسة المعمارية بدون خادم.
موقع رسمي -
المصدر: www.habr.com