מבוא
ב-XNUMX במרץ, RedHat (בקרוב IBM)
המטרה היא להפוך את Java לפלטפורמה המובילה עבור פריסת Kubernetes ופיתוח יישומים ללא שרתים, ומספקת למפתחים גישה מאוחדת לפיתוח הן בסגנונות תגובתיים והן בסגנונות חיוניים.
אם אתה מסתכל על
מובטחת מהירות גבוהה מאוד של השקת אפליקציה וצריכת זיכרון נמוכה. הנה הנתונים מאתר המפתח:
זמן מההתחלה ועד התגובה הראשונה:
תְצוּרָה
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
מרשים, לא?
*לא מצאתי שום מידע על ערימת הטכנולוגיה הזו, אנחנו יכולים להניח שזה סוג של מגף אביב עם ערכת גוף נוספת.
שלום עולם!
היישום הפשוט ביותר שנכתב ב-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
ההבדל מאפליקציה רגילה הוא שאין מחלקת Application! 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, אתה צריך לכתוב מינימום קוד. מספיק לציין את התלות בקובץ ה-assembly, להוסיף הערות @Entity
ולהגדיר את מקור הנתונים ב- application.properties.
את כל. אין sessionFactory, persistence.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 היא מסגרת הניתנת להרחבה. כרגע יש פקודה
מסקנה
לדעתי, קווקוס די תואם את הטרנדים של התקופה. פיתוח קוד Backend הופך לקל וקל יותר, ומסגרת זו מפשטת ומזרזת את פיתוח השירותים על ידי הוספת תמיכה מקורית עבור Docker ו-Kubernetes. יתרון עצום הוא התמיכה המובנית ב-GraalVM ויצירת תמונות תלויות פלטפורמה, המאפשרת לשירותים להתחיל ממש מהר ולתפוס מעט מקום בזיכרון. וזה חשוב מאוד בתקופת התשוקה ההמונית שלנו למיקרו-שירותים וארכיטקטורה ללא שרתים.
אתר רשמי -
מקור: www.habr.com