מבוא למסגרת מיקרונאו

1. מה זה מיקרונו

Micronaut היא מסגרת מבוססת JVM לבניית יישומים קלים ומודולריים. פותח על ידי OCI, אותה חברה שיצרה את Grails, Micronaut היא המסגרת האחרונה שנועדה להפוך את יצירת המיקרו-שירותים למהירים וקלים.

בעוד שמיקרונה מכילה כמה תכונות הדומות למסגרות קיימות כמו אביב, יש לה גם כמה תכונות חדשות המייחדות אותה. ועם תמיכה ב- Java, Groovy ו- Kotlin, הוא מציע מגוון דרכים ליצור יישומים.

2. תכונות עיקריות

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

תכונה נוספת היא התמיכה המחלקה הראשונה שלה בתכנות תגובתי, הן עבור לקוחות והן עבור שרתים. הבחירה ביישום תגובתי ספציפי מוטלת על המפתח שכן נתמכים הן ב- RxJava והן ב- Project Reactor.

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

הוא גם מספק תמיכה ביצירת פונקציות AWS lambda, מה שמקל על יצירת יישומים ללא שרת.

3. תחילת העבודה

הדרך הקלה ביותר להתחיל היא להשתמש ב- SDKMAN:

> sdk להתקין micronaut 1.0.0.RC2

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

החפצים הבינאריים זמינים גם ב- Sonatype וב- GitHub.

בחלקים הבאים נבחן כמה תכונות של המסגרת.

4. הזרקת תלות

כפי שצוין קודם לכן, מיקרונאו מטפלת בהזרקת תלות בזמן הידור, השונה מרוב מכולות ה- IoC.

עם זאת, זה עדיין תומך באופן מלא בהערות JSR-330 כך שעבודה עם שעועית דומה למסגרות אחרות של IoC.

כדי לחבר שעועית אוטומטית בקוד שלנו, אנו משתמשים @לְהַזרִיק:

@ הזריק שירות עובדים פרטי;

ה @לְהַזרִיק ביאור עובד בדיוק כמו @Autowired וניתן להשתמש בהם בשדות, שיטות, בונים ופרמטרים.

כברירת מחדל, כל השעועית מוגדרת כאב-טיפוס. אנו יכולים ליצור במהירות שעועית סינגלטון באמצעות @קְלָף בּוֹדֵד. אם מספר כיתות מיישמות את אותו ממשק שעועית, @יְסוֹדִי ניתן להשתמש כדי לפרק אותם מהפרש:

@Primary @Singleton הכיתה הציבורית BlueCar מיישמת את המכונית {}

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

בהקשר זה, הוא מתנהג כמו מגף האביב @מותנה ביאורים:

@Singleton @Requires (שעועית = DataSource.class) @Requires (property = "מופעל") @Requires (missingBeans = EmployeeService) @Requires (sdk = Sdk.JAVA, value = "1.8") מחלקה ציבורית JdbcEmployeeService מיישם EmployeeService {}

5. בניית שרת HTTP

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

> mn ליצור אפליקציה שלום-עולם-שרת-build maven

פעולה זו תיצור פרויקט Java חדש באמצעות Maven בספרייה בשם שלום-עולם-שרת. בתוך ספריה זו, נמצא את קוד המקור הראשי ליישום שלנו, קובץ Maven POM וקבצי תמיכה אחרים לפרויקט.

יישום ברירת המחדל שהוא פשוט מאוד:

מחלקה ציבורית ServerApplication {public static void main (String [] args) {Micronaut.run (ServerApplication.class); }}

5.1. חסימת HTTP

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

@Controller ("/ greet") מעמד ציבורי GreetController {@ Inject private GreetingService greetingService; @Get ("/ {name}") ברכת מחרוזת ציבורית (שם מחרוזת) {return greetingService.getGreeting () + name; } @Post (value = "/ {name}", consumes = MediaType.TEXT_PLAIN) set StreetGreeting מחרוזת (@Body String name) {return greetingService.getGreeting () + name; }}

5.2. IO תגובתי

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

לדוגמה, עם RxJava נוכל להשתמש נצפה. כמו כן, כאשר אנו משתמשים בכור, אנו יכולים לחזור מונו אוֹ שֶׁטֶף סוגי מידע:

@Get ("/ {name}") ברכת מונו ציבורית (שם מחרוזת) {החזר Mono.just (greetingService.getGreeting () + שם); }

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

בדרך כלל, הבקשות מטופלות במאגר האשכולות הראשי של I / O שנוצר בעת ההפעלה, מה שהופך אותן לחסימות.

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

6. בניית לקוח HTTP

עכשיו בואו לבנות לקוח שיצרוך את נקודות הקצה שיצרנו זה עתה. Micronaut מספקת שתי דרכים ליצירת לקוחות HTTP:

  • לקוח HTTP הצהרתי
  • לקוח HTTP פרוגרמטי

6.1 לקוח HTTP הצהרתי

הדרך הראשונה והמהירה ליצור היא באמצעות גישה הצהרתית:

ממשק ציבורי @Client ("/ greet") GreetingClient {@Get ("/ {name}") שלום מחרוזת (שם מחרוזת); }

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

כדי לבדוק לקוח זה, אנו יכולים ליצור בדיקת JUnit המשתמשת בממשק ה- API של השרת המשובץ להפעלת מופע מוטבע של השרת שלנו:

מחלקה ציבורית GreetingClientTest {שרת EmbeddedServer פרטי; לקוח GreetingClient פרטי; @ לפני התקנת הריק הציבורי () {server = ApplicationContext.run (EmbeddedServer.class); client = server.getApplicationContext (). getBean (GreetingClient.class); } @ לאחר ניקוי חלל פומבי () {server.stop (); } @ Test test public voidGreeting () {assertEquals (client.greet ("Mike"), "Hello Mike"); }}

6.2. לקוח HTTP פרוגרמטי

יש לנו גם אפשרות לכתוב לקוח מסורתי יותר אם אנו זקוקים לשליטה רבה יותר על התנהגותו ויישומו:

@Singleton בכיתה ציבורית ConcreteGreetingClient {פרטי RxHttpClient httpClient; ConcreteGreetingClient ציבורי (@Client ("/") RxHttpClient httpClient) {this.httpClient = httpClient; } שלום מחרוזת ציבורי (שם מחרוזת) {HttpRequest req = HttpRequest.GET ("/ שלום /" + שם); החזר httpClient.retrieve (req) .blockingFirst (); } ברכה יחידה ציבורית ציבורית (שם מחרוזת) {HttpRequest req = HttpRequest.GET ("/ async / greet /" + name); החזר את httpClient.retrieve (req) .first ("שגיאה כפי שהתרחשה"); }}

לקוח HTTP המוגדר כברירת מחדל משתמש ב- RxJava, כך שהוא יכול לעבוד בקלות עם שיחות חוסמות או לא חוסמות.

7. Micronaut CLI

כבר ראינו את כלי ה- Micronaut CLI בפעולה לעיל כשהשתמשנו בו ליצירת פרויקט הדוגמה שלנו.

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

7.1. פרויקטים של הפדרציה

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

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

7.2. תכונות

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

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

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

> mn שירות מידע על פרופיל מסופק: -------------------- * הערה-api - מוסיף API של הערת Java * config-consul - מוסיף תמיכה בתצורה מבוזרת עם קונסול * discovery-consul - מוסיף תמיכה לגילוי שירות עם קונסול * discovery-eureka - מוסיף תמיכה לגילוי שירות עם Eureka * groovy - יוצר יישום גרובי [...] עוד תכונות זמינות

7.3. פרויקטים קיימים

אנו יכולים גם להשתמש בכלי CLI לשינוי פרויקטים קיימים. מאפשר לנו ליצור שעועית, לקוחות, בקרים ועוד. כשאנחנו מנהלים את mn לפקודה מתוך פרויקט קיים, תהיה לנו קבוצה חדשה של פקודות זמינות:

> עזרה mn | שם פקודה תיאור פקודה ---------------------------------------------- - ליצור-שעועית יוצר לקוח שעועית יחיד. יוצר ממשק לקוח ליצור בקר יוצר בקר ומבחן משויך ליצור-עבודה יוצר עבודה בשיטה מתוזמנת

8. מסקנה

בהקדמה הקצרה הזו למיקרונאוט, ראינו כמה קל לבנות שרתי HTTP וחסרי שאינם חוסמים. כמו כן, בדקנו כמה תכונות של ה- CLI שלה.

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

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

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


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