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

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

במדריך זה, נציג את פרויקט Spring Cloud Circuit Breaker ולמד כיצד אנו יכולים להשתמש בו.

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

שים לב שיש לנו מידע נוסף על מהו מפסק וכיצד הם עובדים במבוא ל- Hystrix, Spring Cloud Netflix Hystrix ו- Guide to Resilience4j.

2. מפסק ענן אביב

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

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

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

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

3. תצורה אוטומטית

על מנת להשתמש ביישומים ספציפיים של מפסק ביישום שלנו, עלינו להוסיף את המתנע הקפיץ המתאים. במקרה שלנו, בואו נשתמש אביב-ענן-מתנע-מפסק-חוסן 4j:

 org.springframework.cloud spring-cloud-starter-circuit-breaker-resilience4j 1.0.2.RELEASE 

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

אם נרצה להשבית את התצורה האוטומטית של Resilience4J, היינו יכולים להגדיר את spring.cloud.circuitbreaker.resilience4j.enabled נכס ל שֶׁקֶר.

4. דוגמה למפסק פשוט

בואו ניצור אפליקציית רשת באמצעות Spring Boot כדי לאפשר לנו לחקור כיצד עובדת ספריית Spring Cloud Circuit Breaker Breaker Circuit Breaker Breaker Circuits Breaker Circuits Breaker Circuit Breaker Circuit Breaker Circuits Breaker Circuit Breaker Circuit Breaker Circuit Breaker Circuit Breaker Circuit Breaker Circuit Breaker Circuit Breaker Circuit Breaker Circuits Breaker Circuit Breaker Circuit Breaker Circuit Breaker Circuit Breaker Circuit Breaker Circuit Breaker Circuit Breaker Circuit Breaker Circuit Breaker Circuit Breaker Circuit Breaker Circuit Breaker Circuit Breaker Circuits Breaker Circuit Breaker Circuit Breaker Circuit Breaker Circuit Breaker Circuit Breaker Circuit Breaker Circuit Breaker Circuit Breaker Circuit Breaker Circuit Breaker Circuit Breaker Circuit Breaker Circuit Breaker Circuit Breaker Circuit Breaker Circuit Breaker Circuit Breaker.

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

//jsonplaceholder.typicode.com/albums

4.1. צור מפסק

בואו ניצור את המפסק הראשון שלנו. נתחיל בהזרקת מופע של ה- CircuitBreakerFactory אפונה:

@Service המחלקה הציבורית AlbumService {@ CircuitBreakerFactory CircuitBreakerFactory פרטי; // ...}

כעת אנו יכולים ליצור מפסק בקלות באמצעות ה- CircuitBreakerFactory # ליצור שיטה. זה לוקח את מזהה המפסק כטיעון:

CircuitBreaker circuitBreaker = circuitBreakerFactory.create ("מפסק מעגל");

4.2. עטוף משימה במפסק

על מנת לעטוף ולהפעיל משימה המוגנת על ידי המפסק, עלינו להתקשר ל- rבִּלתִי שיטה שלוקחת א ספק כוויכוח.

מחרוזת ציבורית getAlbumList () {CircuitBreaker circuitBreaker = circuitBreakerFactory.create ("circuitbreaker"); מחרוזת url = "//jsonplaceholder.typicode.com/albums"; החזר circuitBreaker.run (() -> restTemplate.getForObject (url, String.class)); }

המפסק מפעיל עבורנו את השיטה שלנו ומספק סובלנות לתקלות.

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

מחרוזת ציבורית getAlbumList () {CircuitBreaker circuitBreaker = circuitBreakerFactory.create ("circuitbreaker"); מחרוזת url = "// localhost: 1234 / לא אמיתי"; return circuitBreaker.run (() -> restTemplate.getForObject (url, String.class), ניתן לזריקה -> getDefaultAlbumList ()); }

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

במקרה זה לא ניקח בחשבון את החריג. פשוט נחזיר רשימת שמורים במטמון.

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

4.3. בנה בקר

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

@ RestController בקר בכיתה ציבורית {@ שירות שירות פרטי מאושר; @GetMapping ("/ albums") אלבומי מחרוזות ציבוריים () {return service.getAlbumList (); }}

לבסוף, בואו להתקשר לשירות REST ונראה את התוצאות:

[GET] // localhost: 8080 / אלבומים

5. תצורה מותאמת אישית גלובלית

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

על מנת לעקוף את תצורת ברירת המחדל, עלינו לציין שעועית ותכונות משלנו ב- @תְצוּרָה מעמד.

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

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

CircuitBreakerConfig circuitBreakerConfig = CircuitBreakerConfig.custom () .failureRateThreshold (50) .waitDurationInOpenState (Duration.ofMillis (1000)) .slidingWindowSize (2) .build (); TimeLimiterConfig timeLimiterConfig = TimeLimiterConfig.custom () .timeoutDuration (Duration.ofSeconds (4)) .build ();

לאחר מכן, בואו להטמיע את התצורה ב- התאמה אישית שעועית באמצעות Resilience4JCircuitBreakerFactory.configureDefault שיטה:

@Configuration public class Resilience4JConfiguration {@Bean Public Customizer globalCustomConfiguration () {// the CircuitBreakerConfig and אובייקטים timeLimiterConfig מחזירים מפעל -> factory.configureDefault (id -> Resilience4JConfigBuilder חדש (id). TimeLimiterConfigconfigConfigConfigConfigConfigConfigConfigConfigConfigConfigConfigConfigConfigConfigConfigConfigConfigConfigConfigConfigConfigConfigConfigConfigConfigConfigConfigConfigConfigConfigConfigConfigConfigConfigConfigConfigConfigConfigConfigConfig fan של שלט באנגלית). )); }}

6. תצורה מותאמת אישית ספציפית

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

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

@Bean Public Customizer specificCustomConfiguration1 () {// the CircuitBreakerConfig and timeLimiterConfig objects return factory -> factory.configure (builder -> builder.circuitBreakerConfig (circuitBreakerConfig) .timeLimiterConfig (timeLimiterConfig)). }

כאן אנו מספקים פרמטר שני, מזהה המפסק אותו אנו מגדירים.

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

@Bean Public Customizer specificCustomConfiguration2 () {// the CircuitBreakerConfig and timeLimiterConfig objects return factory -> factory.configure (builder -> builder.circuitBreakerConfig (circuitBreakerConfig). TimeLimiterConfig (timeLimiterConfig, "מעגל", "circuitBreaker,"), (מעגל "," מעגל בונה "," מעגל בונה, "", "מעגל,"), בניית מעגל ","), (מעגל ")", "מעגל", "," מעגל "," BreakerBreaker, ". "circuitBreaker3"); }

7. יישומים אלטרנטיביים

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

עם זאת, ישנם יישומים אחרים הנתמכים על ידי Spring Cloud Circuit Breaker אותם אנו יכולים למנף ביישום שלנו:

  • היסטריקס
  • זָקִיף
  • ספרינג שוב

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

לספריות הנ"ל יש יותר יכולות ממה שחקרנו כאן. עם זאת, מפסק ענן האביב הוא מופשט על רק החלק המפסק. לדוגמה, Resilience4j מספק גם מודולים אחרים כמו RateLimiter, תותח, נסה שוב בנוסף ל CircuitBreaker ו TimeLimiter מודולים המשמשים במאמר זה.

8. מסקנה

במאמר זה גילינו את פרויקט Spring Cloud Circuit Breaker.

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

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

לבסוף למדנו להגדיר את כל המפסקים יחד, כמו גם בנפרד.

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


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