Udforskning af den nye Spring Cloud Gateway

1. Oversigt

I denne artikel udforsker vi hovedfunktionerne i Spring Cloud Gateway-projektet, en ny API baseret på Spring 5, Spring Boot 2 og Project Reactor.

Værktøjet leverer rutinemekanismer uden for boksen, der ofte bruges i mikroserviceapplikationer som en måde at skjule flere tjenester bag en enkelt facade.

For en forklaring af Gateway-mønsteret uden Spring Cloud Gateway-projektet, se vores tidligere artikel.

2. Routing Handler

Spring Cloud Gateway er fokuseret på ruteanmodninger og videresender anmodninger til en Gateway Handler Mapping - som bestemmer, hvad der skal gøres med anmodninger, der matcher en bestemt rute.

Lad os starte med et hurtigt eksempel på, hvordan Gateway Handler løser rutekonfigurationer ved hjælp af RouteLocator:

@Bean public RouteLocator customRouteLocator (RouteLocatorBuilder builder) {return builder.routes () .route ("r1", r -> r.host ("**. Baeldung.com"). And () .path ("/ baeldung" ) .uri ("// baeldung.com")) .route (r -> r.host ("**. baeldung.com"). og () .path ("/ myOtherRouting"). filtre (f -> f.prefixPath ("/ myPrefix")) .uri ("// othersite.com") .id ("myOtherID")) .build (); }

Læg mærke til, hvordan vi brugte de vigtigste byggesten i denne API:

  • Rute - gatewayens primære API. Det er defineret af en given identifikation (ID), en destination (URI) og et sæt prædikater og filtre
  • Prædikat - en Java 8'er Prædikat - som bruges til at matche HTTP-anmodninger ved hjælp af overskrifter, metoder eller parametre
  • Filter - en standard forår WebFilter

3. Dynamisk routing

Ligesom Zuul giver Spring Cloud Gateway midler til at dirigere anmodninger til forskellige tjenester.

Rutekonfigurationen kan oprettes ved hjælp af ren Java (RouteLocator, som vist i eksemplet i afsnit 2.1) eller ved hjælp af egenskabskonfiguration:

forår: applikation: navn: gateway-service sky: gateway: ruter: - id: baeldung uri: baeldung.com - id: myOtherRouting uri: localhost: 9999

4. Routing fabrikker

Spring Cloud Gateway matcher ruter ved hjælp af Spring WebFlux HandlerMapping infrastruktur.

Det inkluderer også mange indbyggede Route Predicate-fabrikker. Alle disse prædikater matcher forskellige attributter i HTTP-anmodningen. Prædikatfabrikker med flere ruter kan kombineres via det logiske “og”.

Rutetilpasning kan anvendes både programmatisk eller via en fil med konfigurationsegenskaber ved hjælp af en anden type Route Predicate-fabrikker.

Vores artikel Spring Cloud Gateway Routing Predicate Factories udforsker routingfabrikker mere detaljeret.

5. WebFilter fabrikker

Rutefiltre muliggør ændring af den indkommende HTTP-anmodning eller udgående HTTP-respons.

Spring Cloud Gateway inkluderer mange indbyggede WebFilter-fabrikker samt muligheden for at oprette brugerdefinerede filtre.

Vores artikel Spring Cloud Gateway WebFilter Factories udforsker WebFilter-fabrikker mere detaljeret.

6. Spring Cloud DiscoveryClient Support

Spring Cloud Gateway kan let integreres med Service Discovery og Registry-biblioteker, såsom Eureka Server og Consul:

@Configuration @EnableDiscoveryClient offentlig klasse GatewayDiscoveryConfiguration {@Bean public DiscoveryClientRouteDefinitionLocator discoveryClientRouteLocator (DiscoveryClient discoveryClient) {returner nye DiscoveryClientRouteDefinitionLocator (discoveryClient); }}

6.1. LoadBalancerClient Filter

Det LoadBalancerClientFilter leder efter en URI i ejendommen exchange-attribut ved hjælp af ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR.

Hvis URL'en har en lb. ordning (f.eks. lb: // baeldung-service) det bruger Spring Cloud LoadBalancerClient for at løse navnet (dvs. baeldung-service) til en faktisk vært og port.

Den umodificerede originale URL er placeret i ServerWebExchangeUtils.GATEWAY_ORIGINAL_REQUEST_URL_ATTR attribut.

7. Overvågning

Spring Cloud Gateway bruger Actuator API, et velkendt Spring-Boot-bibliotek, der leverer adskillige out-of-the-box-tjenester til overvågning af applikationen.

Når Actuator API er installeret og konfigureret, kan gatewayovervågningsfunktionerne visualiseres ved at få adgang til det / gateway / slutpunkt.

8. Implementering

Vi opretter nu et simpelt eksempel på brugen af ​​Spring Cloud Gateway som en proxyserver ved hjælp af sti predikat.

8.1. Afhængigheder

Spring Cloud Gateway er i øjeblikket i milepælsregistret på version 2.0.0.RC2. Dette er også den version, vi bruger her.

For at tilføje projektet bruger vi afhængighedsstyringssystemet:

   org.springframework.cloud spring-cloud-gateway 2.0.0.RC2 pom import 

Dernæst tilføjer vi de nødvendige afhængigheder:

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

8.2. Kodeimplementering

Og nu opretter vi en simpel rutekonfiguration i ansøgning.yml fil:

spring: cloud: gateway: routes: - id: baeldung_route uri: //baeldung.com predicates: - Path = / baeldung / management: endpoints: web: exposure: include: "* ' 

Og Gateway-applikationskoden:

@SpringBootApplication offentlig klasse GatewayApplication {public static void main (String [] args) {SpringApplication.run (GatewayApplication.class, args); }}

Når applikationen starter, kan vi få adgang til url: “// localhost / aktuator / gateway / routes / baeldung_route” for at kontrollere al oprettet routingkonfiguration:

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

Vi ser, at den relative url: “/ Baeldung” er konfigureret som en rute,så rammer url “// localhost / baeldung” vi bliver omdirigeret til “//baeldung.com“, Som blev konfigureret i vores eksempel.

9. Konklusion

I denne artikel udforskede vi nogle af de funktioner og komponenter, der er en del af Spring Cloud Gateway. Denne nye API giver out-of-the-box værktøjer til gateway og proxy support.

Eksemplerne præsenteret her kan findes i vores GitHub-arkiv.


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