חקר שער הענן החדש של אביב

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

במאמר זה נחקור את התכונות העיקריות של פרויקט Spring Cloud Gateway, ממשק API חדש המבוסס על Spring 5, Spring Boot 2 ו- Project Reactor.

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

להסבר על דפוס Gateway ללא פרויקט Spring Cloud Gateway, עיין במאמר הקודם שלנו.

2. מטפל בניתוב

בהיותו ממוקד בבקשות ניתוב, Spring Cloud Gateway מעביר בקשות למיפוי מטפל בשער - שקובע מה צריך לעשות בבקשות התואמות מסלול ספציפי.

נתחיל בדוגמא מהירה כיצד Gateway Handler פותר תצורות מסלול באמצעות RouteLocator:

@Bean RouteLocator ציבורי customRouteLocator (בונה RouteLocatorBuilder) {return builder.routes () .route ("r1", r -> r.host ("**. Baeldung.com"). And () .path ("/ baeldung" ) .uri ("// baeldung.com")) .route (r -> r.host ("**. baeldung.com"). and () .path ("/ myOtherRouting") .filters (f -> f.prefixPath ("/ myPrefix")) .uri ("// othersite.com") .id ("myOtherID")) .build (); }

שימו לב כיצד השתמשנו באבני הבניין העיקריות של ה- API הזה:

  • מסלול - ה- API הראשי של השער. זה מוגדר על ידי זיהוי נתון (מזהה), יעד (URI) ומכלול פרדיקטים ומסננים
  • לנבא - ג'אווה 8 לנבא - המשמש להתאמת בקשות HTTP באמצעות כותרות, שיטות או פרמטרים
  • מסנן - מעיין סטנדרטי WebFilter

3. ניתוב דינמי

בדיוק כמו Zuul, Spring Cloud Gateway מספק אמצעים לניתוב בקשות לשירותים שונים.

ניתן ליצור את תצורת הניתוב באמצעות Java טהור (RouteLocator, כפי שמוצג בדוגמה בסעיף 2.1) או באמצעות תצורת מאפיינים:

קפיץ: יישום: שם: שער שירות ענן: שער: מסלולים: - id: baeldung uri: baeldung.com - id: myOtherRouting uri: localhost: 9999

4. ניתוב מפעלים

Spring Cloud Gateway תואם מסלולים באמצעות Spring WebFlux HandlerMapping תַשׁתִית.

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

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

המאמר שלנו Spring Cloud Gateway Routing Predicate מפעלים בוחן מפעלים ניתוב ביתר פירוט.

5. מפעלים WebFilter

מסנני מסלול מאפשרים את שינוי בקשת ה- HTTP הנכנסת או את תגובת ה- HTTP היוצאת.

Spring Cloud Gateway כולל הרבה מפעלים מובנים של WebFilter, כמו גם אפשרות ליצור פילטרים מותאמים אישית.

המאמר שלנו Spring Cloud Gateway WebFilter מפעלים בוחן את מפעלים WebFilter ביתר פירוט.

6. תמיכה בענן האביב DiscoveryClient

ניתן לשלב בקלות את Spring Cloud Gateway עם ספריות גילוי שירות ורישום, כגון שרת Eureka וקונסול:

@Configuration @EnableDiscoveryClient מחלקה ציבורית GatewayDiscoveryConfiguration {@Bean public DiscoveryClientRouteDefinitionLocator discoveryClientRouteLocator (DiscoveryClient discoveryClient) {להחזיר DiscoveryClientRouteDefinitionLocator חדש (discoveryClient); }}

6.1. LoadBalancerClient לְסַנֵן

ה LoadBalancerClientFilter מחפש URI במאפיין התכונה exchange באמצעות ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR.

אם כתובת האתר כוללת lb. תכנית (למשל, lb: // baeldung-service) זה ישתמש בענן האביב LoadBalancerClient כדי לפתור את השם (כלומר, שירות baeldung) למארח ולנמל בפועל.

כתובת האתר המקורית שלא השתנתה ממוקמת ב- ServerWebExchangeUtils.GATEWAY_ORIGINAL_REQUEST_URL_ATTR תְכוּנָה.

7. מעקב

Spring Cloud Gateway עושה שימוש ב- API של Actuator, ספריית Spring-Boot ידועה המספקת כמה שירותים מהקופסה לניטור היישום.

לאחר התקנת התצורה של ממשק ה- API של Actuator, ניתן לדמיין את תכונות ניטור השער באמצעות גישה /כְּנִיסָה/ נקודת סיום.

8. יישום

כעת ניצור דוגמה פשוטה לשימוש ב- Spring Cloud Gateway כשרת proxy באמצעות ה- נָתִיב לְבַסֵס.

8.1. תלות

שער ענן האביב נמצא כעת במאגר אבני הדרך, בגרסה 2.0.0.RC2. זו גם הגרסה בה אנו משתמשים כאן.

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

   org.springframework.cloud spring-cloud-gateway 2.0.0.RC2 pom יבוא 

לאחר מכן נוסיף את התלות הדרושה:

 org.springframework.boot spring-boot-actuator org.springframework.boot spring-boot-starter-webflux org.springframework.cloud spring-cloud-starter-gateway 

8.2. יישום קוד

ועכשיו אנו יוצרים תצורת ניתוב פשוטה ב- application.yml קוֹבֶץ:

קפיץ: ענן: שער: מסלולים: - id: baeldung_route uri: //baeldung.com predicates: - Path = / baeldung / management: נקודות קצה: web: חשיפה: כוללים: "* ' 

וקוד יישום Gateway:

@SpringBootApplication מחלקה ציבורית GatewayApplication {public static void main (String [] args) {SpringApplication.run (GatewayApplication.class, args); }}

לאחר תחילת היישום, אנו יכולים לגשת לכתובת האתר: "// localhost / actuator / gateway / routes / baeldung_route" כדי לבדוק את כל תצורות הניתוב שנוצרו:

{"id": "baeldung_route", "predicates": [{"name": "Path", "args": {"_ genkey_0": "/ baeldung"}}], "filters": [], "uri" : "// baeldung.com", "order": 0}

אנו רואים כי כתובת האתר היחסית: "/ Baeldung" מוגדר כמסלול,אז מכה בכתובת האתר “// localhost / baeldung” יופנה ל"//baeldung.com", כפי שהוגדר בדוגמה שלנו.

9. מסקנה

במאמר זה בחנו כמה מהתכונות והרכיבים המהווים חלק מ- Spring Cloud Gateway. ממשק API חדש זה מספק כלים מהקופסה לתמיכה ב- gateway ו- proxy.

את הדוגמאות המוצגות כאן ניתן למצוא במאגר GitHub שלנו.


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