מדריך מהיר לקונסול ענן האביב

1. סקירה כללית

פרויקט Spring Cloud Consul מספק שילוב קל עם Consul ליישומי Boot Boot.

קונסול הוא כלי המספק רכיבים לפתרון כמה מהאתגרים הנפוצים ביותר בארכיטקטורת מיקרו-שירותים:

  • גילוי שירות - כדי לרשום ולבטל רישום אוטומטית של מיקומי הרשת של מופעי השירות
  • בדיקת בריאות - כדי לזהות מתי מופע שירות פועל
  • תצורה מבוזרת - כדי להבטיח שכל מופעי השירות משתמשים באותה תצורה

במאמר זה נראה כיצד נוכל להגדיר יישום Spring Boot לשימוש בתכונות אלה.

2. תנאים מוקדמים

ראשית, מומלץ להעיף מבט מהיר על הקונסול ועל כל התכונות שלו.

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

ראשית, נצטרך להוסיף את תלות האביב-ענן-התחל-קונסול-כל שלנו pom.xml:

 org.springframework.cloud spring-cloud-starter-consul-all 1.3.0.RELEASE 

3. גילוי שירות

בואו נכתוב את הבקשה הראשונה של Spring Boot ונחבר לסוכן הקונסול הפועל:

@SpringBootApplication מחלקה ציבורית ServiceDiscoveryApplication {public static void main (String [] args) {new SpringApplicationBuilder (ServiceDiscoveryApplication.class) .web (true) .run (args); }}

כברירת מחדל, Spring Boot ינסה להתחבר לסוכן הקונסול ב- אירוח מקומי: 8500. כדי להשתמש בהגדרות אחרות, עלינו לעדכן את ה- application.yml קוֹבֶץ:

אביב: ענן: קונסול: מארח: נמל localhost: 8500

ואז, אם נבקר באתר של סוכן הקונסול בדפדפן בכתובת // localhost: 8500, נראה שהיישום שלנו נרשם כראוי בקונסול עם המזהה מ "$ {Spring.application.name}: $ {פרופילים מופרדים בפסיק}: $ {server.port}".

כדי להתאים אישית את המזהה הזה, עלינו לעדכן את הנכס spring.cloud.discovery.instanceId עם ביטוי אחר:

spring: application: name: myApp cloud: consul: discovery: instanceId: $ {spring.application.name}: $ {random.value}

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

סוף כל סוף, כדי להשבית את גילוי השירות, עלינו להגדיר את הנכס spring.cloud.consul.discovery.enabled ל שֶׁקֶר.

3.1. שירותי חיפוש

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

האביב מספק א ממשק API DiscoveryClient לזה, שנוכל לאפשר באמצעות ה- @EnableDiscoveryClient ביאור:

@SpringBootApplication @EnableDiscoveryClient מחלקה ציבורית DiscoveryClientApplication {// ...}

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

@RestController מחלקה ציבורית DiscoveryClientController {@Autowired DiscoveryClient discoveryClient; public אופציונלי serviceUrl () {return discoveryClient.getInstances ("myApp") .stream () .findFirst () .map (si -> si.getUri ()); }}

לבסוף נגדיר את נקודות הקצה של היישום שלנו:

@GetMapping ("/ discoveryClient") גילוי מחרוזת פומבי () זורק RestClientException, ServiceUnavailableException {URI service = serviceUrl () .map (s -> s.resolve ("/ ping")) .orElseThrow (ServiceUnavailableException :: new); להחזיר restTemplate.getForEntity (שירות, String.class) .getBody (); } @GetMapping ("/ ping") פינג מחרוזת פומבי () {להחזיר "פונג"; }

ה "MyApp / פינג" הנתיב הוא שם יישום האביב עם נקודת הקצה של השירות. הקונסול יספק את כל היישומים הזמינים בשם "MyApp".

4. בדיקת בריאות

הקונסול בודק את תקינות נקודות הקצה של השירות מעת לעת.

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

אביב: ענן: קונסול: גילוי: healthCheckPath: / בריאות שלי-לבדוק healthCheck אינטרוול: 20s

כתוצאה מכך, הקונסול יסקור את "/ בדיקת הבריאות שלי" נקודת סיום כל 20 שניות.

בואו נגדיר את שירות בדיקת הבריאות המותאם אישית שלנו להחזרת א אסור סטָטוּס:

@GetMapping ("/ my-health-check") Public ResponseEntity myCustomCheck () {String message = "בודק את פונקציית בדיקת ההילינג שלי"; להחזיר ResponseEntity חדש (הודעה, HttpStatus.FORBIDDEN); }

אם נעבור לאתר סוכני הקונסול, נראה שהיישום שלנו נכשל. כדי לתקן זאת, "/ בדיקת הבריאות שלי" השירות צריך להחזיר את ה- HTTP 200 בסדר קוד סטטוס.

5. תצורה מבוזרת

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

ראשית, עלינו להוסיף את תלות האביב-ענן-התחל-קונסול-קונפיג לתחום שלנו pom.xml:

 org.springframework.cloud spring-cloud-starter-consul-config 1.3.0.RELEASE 

עלינו גם להעביר את ההגדרות של שם היישום Consul ו- Spring מה- application.yml קובץ ל- bootstrap.yml קובץ שאביב נטען תחילה.

לאחר מכן עלינו להפעיל את תצורת הקונסול של ענן האביב:

אביב: יישום: שם: myApp ענן: קונסול: מארח: יציאת localhost: 8500 תצורה: מופעלת: נכון

אביב ענן קונסול קונפיג יחפש את הנכסים בקונסול ב “/ Config / myApp”. אז אם יש לנו נכס שנקרא "My.prop"נצטרך ליצור נכס זה באתר סוכני הקונסול.

אנו יכולים ליצור את הנכס על ידי מעבר אל "ערך מפתח" קטע, ואז נכנסים “/ Config / myApp / my / prop” בתוך ה "צור מפתח" טופס ו "שלום עולם" כערך. לבסוף, לחץ על "לִיצוֹר" לַחְצָן.

זכור שאם אנו משתמשים בפרופילי Spring, עלינו להוסיף את הפרופילים לצד שם היישום Spring. לדוגמא, אם אנו משתמשים ב- dev בפרופיל, הדרך האחרונה בקונסול תהיה "/ Config / myApp, dev".

עכשיו, בואו נראה איך נראה הבקר שלנו עם המאפיינים המוזרקים:

@RestController מחלקה ציבורית DistributedPropertiesController {@Value ("$ {my.prop}") ערך מחרוזת; @ מאפייני MyProperties פרטיים מאוירים; @GetMapping ("/ getConfigFromValue") מחרוזת ציבורית getConfigFromValue () {ערך החזרה; } @GetMapping ("/ getConfigFromProperty") מחרוזת ציבורית getConfigFromProperty () {return properties.getProp (); }}

וה MyProperties מעמד:

@RefreshScope @Configuration @ConfigurationProperties ("שלי") מחלקה ציבורית MyProperties {private String String; // גטר סטנדרטי, מגדיר}

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

5.1. עדכון התצורה

מה לגבי עדכון התצורה מבלי להפעיל מחדש את יישום Spring Boot?

אם נחזור לאתר סוכני הקונסול ונעדכן את הנכס “/ Config / myApp / my / prop” עם ערך אחר כמו "שלום עולם חדש"ואז השדה ערך לא ישתנה והשדה נכסים יתעדכן ל- "שלום עולם חדש" כצפוי.

זה בגלל שהשדה נכסים הוא MyProperties בכיתה יש את @ RefreshScope ביאור. כל השעועית מוסברת עם @ RefreshScope ההערה תתרענן לאחר שינויים בתצורה.

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

6. מסקנה

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

הצגנו גם מספר גישות ללקוחות להפעיל שירותים רשומים אלה.

כרגיל, ניתן למצוא מקורות באתר GitHub.


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