מדריך QuarkusIO

1. הקדמה

כיום, מקובל מאוד לכתוב אפליקציה ולפרוס לענן ולא לדאוג לתשתית. Serverless ו- FaaS הפכו פופולריים מאוד.

בסביבה מסוג זה, שבה מקרים נוצרים ונהרסים לעיתים קרובות, זמן האתחול והזמן לבקשה ראשונה הם חשובים ביותר מכיוון שהם יכולים ליצור חווית משתמש שונה לחלוטין.

שפות כ- JavaScript ופייתון נמצאות תמיד באור הזרקורים בתרחיש מסוג זה. במילים אחרות, ג'אווה עם ה- JAR השמנים שלה וזמן האתחול הארוך מעולם לא הייתה מתמודדת עליונה.

במדריך זה, אנו נציג את קווארקוס ונדון אם זו אלטרנטיבה להבאת Java בצורה יעילה יותר לענן.

2. QuarkusIO

QuarkusIO, הג'אווה התת אטומית העל-קולית, מבטיח לספק חפצים קטנים, זמן אתחול מהיר במיוחד ובקשה נמוכה יותר מהזמן הראשון. בשילוב עם GraalVM, קוארקוס ירכיב מבעוד מועד (AOT).

ומכיוון שקווארקוס בנוי על פי תקנים, איננו צריכים ללמוד שום דבר חדש. כתוצאה מכך, אנו יכולים להשתמש בין היתר ב- CDI וב- JAX-RS. כמו כן, לקווארקוס יש הרבה הרחבות, כולל כאלה התומכות ב- Hibernate, Kafka, OpenShift, Kubernetes ו- Vert.x.

3. היישום הראשון שלנו

הדרך הקלה ביותר ליצור פרויקט Quarkus חדש היא לפתוח מסוף ולהקליד:

mvn io.quarkus: תוסף quarkus-maven: 0.13.1: צור \ -DprojectGroupId = com.baeldung.quarkus \ -DprojectArtifactId = quarkus-project \ -DclassName = "com.baeldung.quarkus.HelloResource" \ -Dpath = " /שלום"

זה ייצור את שלד הפרויקט, א HelloResource עם /שלום נקודת קצה חשופה, תצורה, פרויקט Maven ו- Dockerfiles.

לאחר הייבוא ​​ל- IDE שלנו, יהיה לנו מבנה דומה לזה שמוצג בתמונה למטה:

בואו נבדוק את התוכן של ה- HelloResource מעמד:

@Path ("/ שלום") מחלקה ציבורית HelloResource {@GET @Produces (MediaType.TEXT_PLAIN) ציבורי מחרוזת שלום () {להחזיר "שלום"; }}

הכל נראה טוב עד כה. בשלב זה יש לנו יישום פשוט עם נקודת קצה אחת של RESTEasy JAX-RS. בואו נלך לבדוק אותו על ידי פתיחת מסוף והפעלת הפקודה:

./mvnw לקמפל קווארקוס: dev:

יש לחשוף את נקודת הקצה של REST אצל localhost: 8080 / שלום. בואו לבדוק את זה עם סִלְסוּל פקודה:

$ curl localhost: 8080 / שלום שלום

4. טען מחדש

בעת ריצה במצב פיתוח (./mvn לקמפל קווארקוס: dev), Quarkus מספק יכולת טעינה חמה. במילים אחרות, שינויים שבוצעו בקבצי Java או בקבצי תצורה יורכבו באופן אוטומטי לאחר רענון הדפדפן. התכונה המרשימה ביותר כאן היא שאנחנו לא צריכים לשמור את הקבצים שלנו. זה יכול להיות טוב או רע, תלוי בהעדפה שלנו.

כעת נשנה את הדוגמה שלנו כדי להדגים את יכולת הטעינה החמה. אם היישום נעצר, נוכל פשוט להפעיל אותו מחדש במצב dev. נשתמש באותה דוגמה כמו בעבר כנקודת ההתחלה שלנו.

ראשית, ניצור HelloService מעמד:

@ApplicationScoped מחלקה ציבורית HelloService {ציבורי מחרוזת מנומס שלום (שם מחרוזת) {להחזיר "שלום מר / גברת" + שם; }}

כעת נשנה את ה- HelloResource בכיתה, מזריק את HelloService והוספת שיטה חדשה:

@ הזרק HelloService helloService; @GET @Produces (MediaType.APPLICATION_JSON) @Path ("/ מנומס / {שם}") ברכת מחרוזת ציבורית (@PathParam ("שם") שם מחרוזת) {החזר helloService.politeHello (שם); }

לאחר מכן, בואו לבדוק את נקודת הקצה החדשה שלנו:

$ curl localhost: 8080 / שלום / מנומס / Baeldung שלום מר / גברת Baeldung

נערוך שינוי נוסף כדי להדגים כי ניתן להחיל אותו על קבצי נכסים. בואי נערוך את application.properties הקובץ והוסף מפתח אחד נוסף:

ברכה = בוקר טוב

לאחר מכן, נשנה את ה- HelloService להשתמש בנכס החדש שלנו:

@ConfigProperty (name = "greeting") ברכת מחרוזת פרטית; ציבורי מחרוזת מנומס שלום (שם מחרוזת) {ברכה חזרה + "" + שם; }

אם נבצע את אותו הדבר סִלְסוּל פקודה, עלינו לראות כעת:

בוקר טוב באלדונג

אנו יכולים לארוז את היישום בקלות על ידי הפעלת:

חבילת ./mvnw 

פעולה זו תיצור 2 קבצי צנצנת בתוך ה- יַעַד מַדרִיך:

  • quarkus-project-1.0-SNAPSHOT-runner.jar - צנצנת הפעלה עם התלות המועתקת יעד / lib
  • quarkus-project-1.0-SNAPSHOT.jar - מכיל מחלקות וקבצי משאבים

כעת אנו יכולים להריץ את היישום הארוז:

java -jar target / quarkus-project-1.0-SNAPSHOT-runner.jar

5. תמונה ילידית

לאחר מכן נפיק תמונה מקורית של היישום שלנו. תמונה מקומית תשפר את זמן ההפעלה וזמן התגובה הראשונה. במילים אחרות, זה מכיל את כל מה שהוא צריך כדי להפעיל, כולל ה- JVM המינימלי הדרוש להפעלת היישום.

ראשית, עלינו להתקין את GraalVM ולהגדיר את משתנה הסביבה GRAALVM_HOME.

כעת נעצור את היישום (Ctrl + C), אם עדיין לא נעצר ונפעיל את הפקודה:

חבילת ./mvnw -Pnative

פעולה זו עשויה להימשך מספר שניות. מכיוון שתמונות מקומיות מנסות ליצור את כל הקוד AOT כדי לאתחל מהר יותר, כתוצאה מכך יהיו לנו זמני בנייה ארוכים יותר.

אנחנו יכולים לרוץ ./mvnw אמת -נטיב כדי לוודא שחפץ הילידים שלנו נבנה כראוי:

שנית, אנחנו צור תמונת מכולה באמצעות ההפעלה המקורית שלנו. לשם כך, עלינו להחזיק זמן ריצה של מכולה (כלומר Docker) במחשב שלנו. בוא נפתח חלון מסוף ונבצע:

/ חבילה ./mvnw -Pnative -Dnative-image.docker-build = נכון 

פעולה זו תיצור הפעלה של 64 סיביות של לינוקס, ולכן אם אנו משתמשים במערכת הפעלה אחרת, יתכן שלא יהיה ניתן להפעיל אותה יותר. זה בסדר לעת עתה.

דור הפרויקטים יצר א Dockerfile.native בשבילנו:

FROM registry.fedoraproject.org/fedora-minimal WORKDIR / work / COPY target / * - runner / work / application RUN chmod 775 / work EXPOSE 8080 CMD ["./application", "-Dquarkus.http.host = 0.0.0.0 "] 

אם נבחן את הקובץ, יש לנו רמז לבאות. ראשית, אנחנו ליצור תמונת דוקר:

docker build -f src / main / docker / Dockerfile.native -t quarkus / quarkus-project.

כעת נוכל להפעיל את המכולה באמצעות:

docker run -i --rm -p 8080: 8080 quarkus / quarkus-project

המכולה התחילה בזמן נמוך להפליא של 0.009 שניות. זו אחת החוזקות של קווארקוס.

לבסוף, עלינו לבדוק את REST המתוקן שלנו כדי לאמת את היישום שלנו:

$ curl localhost: 8080 / שלום / מנומס / Baeldung בוקר טוב Baeldung

6. פריסה ל- OpenShift

לאחר שסיימנו את הבדיקה המקומית באמצעות Docker, נפרוס את המכולה שלנו ל- OpenShift. בהנחה שיש לנו את תמונת ה- Docker ברישום שלנו, אנו יכולים לפרוס את היישום לפי השלבים הבאים:

oc-build -binary --name = quarkus-project -l app = quarkus-project oc תיקון bc / quarkus-project -p '{"spec": {"אסטרטגיה": {"dockerStrategy": {"dockerfilePath" : "src / main / docker / Dockerfile.native"}}}} 'oc start-build quarkus-project - from-dir =. - עקוב אחר האפליקציה החדשה - image-stream = quarkus-project: oc אחרון חושף את פרויקט ה- quarkus

כעת, אנו יכולים לקבל את כתובת האתר של היישום על ידי הפעלת:

oc לקבל מסלול

לבסוף, ניגש לאותה נקודת קצה (שימו לב שכתובת האתר עשויה להיות שונה, תלוי בכתובת ה- IP שלנו):

$ curl //quarkus-project-myproject.192.168.64.2.nip.io/hello/polite/Baeldung בוקר טוב באלדונג

7. מסקנה

במאמר זה הדגמנו כי Quarkus הוא תוספת נהדרת שיכולה להביא את Java בצורה יעילה יותר לענן. לדוגמה, ניתן לדמיין כעת את Java ב- AWS Lambda. כמו כן, קווארקוס מבוסס על תקנים כמו JPA ו- JAX / RS. לכן, אנחנו לא צריכים ללמוד שום דבר חדש.

קווארקוס תפס תשומת לב רבה לאחרונה, והמון תכונות חדשות מתווספות מדי יום. ישנם מספר פרויקטים של הפעלה מהירה עבורנו לנסות את Quarkus במאגר Quarkus GitHub.

כמו תמיד, הקוד של מאמר זה זמין באתר GitHub. קידוד שמח!


$config[zx-auto] not found$config[zx-overlay] not found