Quarkus هو جافا الأسرع من الصوت. لمحة موجزة عن الإطار


مقدمة


في 7 مارس ، قدمت RedHat (قريباً IBM) الإطار الجديد ، Quarkus . وفقًا للمطورين ، يستند هذا الإطار إلى GraalVM و OpenJDK HotSpot وهو مصمم لـ Kubernetes. تتضمن حزمة Quarkus: JPA / Hibernate و JAX-RS / RESTEasy و Eclipse Vert.x و Netty و Apache Camel و Kafka و Prometheus وغيرها.


الهدف من ذلك هو جعل Java النظام الأساسي الرائد للنشر على Kubernetes وتطوير التطبيقات بدون خادم ، مما يوفر للمطورين نهجًا موحدًا لتطوير كل من الأساليب التفاعلية والضرورية.


إذا نظرت إلى هذا التصنيف من الأطر ، فإن Quarkus يقع في مكان ما بين "مجمعي / مولدات الشفرات" و "أطر المستوى الكامل عالية المستوى". هذا بالفعل أكثر من مجرد أداة تجميع ، ولكنه أيضًا لا يصل إلى مجموعة كاملة ، لأنه الأرض لتطوير الخلفية.


وعدت سرعة إطلاق التطبيق عالية جدا وانخفاض استهلاك الذاكرة. هذه هي البيانات من موقع المطور:


الوقت من البداية إلى الإجابات الأولى:


ترتيبالراحةREST + JPA
Quarkus + GraalVM0.0140.055
Quarkus + OpenJDK0.752.5
المكدس السحابي التقليدي *4.39.5

استهلاك الذاكرة (ميغابايت):


ترتيبالراحةREST + JPA
Quarkus + GraalVM1335
Quarkus + OpenJDK74130
المكدس السحابي التقليدي *140218

مثير للإعجاب ، أليس كذلك؟


* لم أجد معلومات حول هذه المجموعة التقنية ، يمكننا أن نفترض أن هذا نوعًا ما من 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 ، persistence.xml وملفات الخدمة الأخرى. نكتب فقط الكود المطلوب. ومع ذلك ، إذا لزم الأمر ، يمكنك إنشاء ملف persistence.xml وتكوين طبقة ORM بشكل أكثر دقة.


Quarkus يدعم التخزين المؤقت للكيانات ، ومجموعات للعلاقات الفردية ، وكذلك الاستعلامات. للوهلة الأولى ، يبدو رائعًا ، ولكنه التخزين المؤقت المحلي ، لمضيف Kubernetes واحد. أي لا يتم مزامنة ذاكرة التخزين المؤقت للعقد مختلفة مع بعضها البعض. آمل أن يكون هذا مؤقتا.


تنفيذ التعليمات البرمجية غير المتزامنة


كما ذكر أعلاه ، يدعم كواركس أيضًا أسلوب برمجة تفاعلي. يمكن كتابة رمز التطبيق السابق في شكل آخر.


 @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. يقوم AnnotationSubstrateTest بتشغيل رمز التطبيق الخاص بالنظام الأساسي. يمكن إعادة استخدام رمز الاختبار الحالي باستخدام الوراثة ، ونتيجة لذلك ، فإن رمز اختبار التطبيق الخاص بالنظام الأساسي سيبدو كما يلي:


 @SubstrateTest public class GreetingResourceIT extends GreetingResourceTest { } 

يمكن إنشاء الصورة التي تم إنشاؤها في Docker وتشغيلها في Kubernetes أو OpenShift ، الموصوفة بالتفصيل في التعليمات .


أدوات


يمكن استخدام إطار Quarkus مع Maven و Gradle. مافن مدعوم بالكامل ، على عكس Gradle. لسوء الحظ ، في الوقت الحالي لا يدعم Gradle إنشاء مشروع فارغ ، يحتوي الموقع على برنامج تعليمي مفصل.


ملحقات


Quarkus هو إطار للمد. يوجد حاليًا حوالي 40 امتدادًا تضيف وظائف مختلفة - بدءًا من دعم الحاوية Spring DI و Apache Camel إلى مقاييس التسجيل والنشر لتشغيل الخدمات. وهناك بالفعل امتداد لدعم تطبيقات الكتابة في لغة Kotlin ، بالإضافة إلى Java.


الخاتمة


في رأيي ، كواركس جزء لا يتجزأ من اتجاهات الوقت. أصبح تطوير التعليمات البرمجية الخلفية أسهل وأبسط ، وهذا الإطار يزيد من تبسيط وتسريع عملية تطوير الخدمات ، مضيفًا دعمًا محليًا لـ Docker و Kubernetes. ميزة الجمع الضخمة هي الدعم المضمن لـ GraalVM وإنشاء صور خاصة بالنظام الأساسي ، والتي تتيح لك إمكانية جعل الخدمات تبدأ بشكل سريع بالفعل وتحتل مساحة صغيرة من الذاكرة. وهذا أمر مهم للغاية في عصرنا الحماسي الهائل للخدمات الدقيقة والهندسة المعمارية بدون خادم.


الموقع الرسمي هو quarkus.io . أمثلة لمشاريع البداية السريعة موجودة بالفعل على GitHub .

Source: https://habr.com/ru/post/ar443242/


All Articles