Utforsk New Spring Cloud Gateway

1. Oversikt

I denne artikkelen vil vi utforske hovedtrekkene i Spring Cloud Gateway-prosjektet, et nytt API basert på Spring 5, Spring Boot 2 og Project Reactor.

Verktøyet gir rutemekanismer utenom boksen som ofte brukes i mikroserviceapplikasjoner som en måte å skjule flere tjenester bak en enkelt fasade.

For en forklaring på Gateway-mønsteret uten Spring Cloud Gateway-prosjektet, sjekk ut vår forrige artikkel.

2. Rutebehandler

Å være fokusert på rutingsforespørsler, sender Spring Cloud Gateway forespørsler til en Gateway Handler Mapping - som bestemmer hva som skal gjøres med forespørsler som samsvarer med en bestemt rute.

La oss starte med et raskt eksempel på hvordan Gateway Handler løser rutekonfigurasjoner ved hjelp av 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") .filter (f -> f.prefixPath ("/ myPrefix")) .uri ("// othersite.com") .id ("myOtherID")) .build (); }

Legg merke til hvordan vi brukte de viktigste byggesteinene i dette API: et:

  • Rute - gatewayens primære API. Det er definert av en gitt identifikasjon (ID), en destinasjon (URI) og sett med predikater og filtre
  • Predikat - en Java 8-er Predikat - som brukes til å matche HTTP-forespørsler ved hjelp av overskrifter, metoder eller parametere
  • Filter - en standard vår WebFilter

3. Dynamisk ruting

Akkurat som Zuul, tilbyr Spring Cloud Gateway midler for ruting av forespørsler til forskjellige tjenester.

Rutekonfigurasjonen kan opprettes ved hjelp av ren Java (RouteLocator, som vist i eksemplet i avsnitt 2.1) eller ved å bruke egenskapskonfigurasjon:

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

4. Rutefabrikker

Spring Cloud Gateway samsvarer med ruter ved hjelp av Spring WebFlux HandlerMapping infrastruktur.

Den inkluderer også mange innebygde Route Predicate-fabrikker. Alle disse predikatene samsvarer med forskjellige attributter for HTTP-forespørselen. Predikatfabrikker med flere ruter kan kombineres via det logiske “og”.

Rutematching kan brukes både programmatisk eller via en konfigurasjonsegenskapsfil ved hjelp av en annen type Route Predicate-fabrikker.

Vår artikkel Spring Cloud Gateway Routing Predicate Factories utforsker rutefabrikker mer detaljert.

5. WebFilter-fabrikker

Rutefiltre gjør det mulig å endre innkommende HTTP-forespørsel eller utgående HTTP-respons.

Spring Cloud Gateway inkluderer mange innebygde WebFilter-fabrikker, samt muligheten til å lage tilpassede filtre.

Vår artikkel Spring Cloud Gateway WebFilter Factories utforsker WebFilter-fabrikker mer detaljert.

6. Support for våren Cloud DiscoveryClient

Spring Cloud Gateway kan enkelt integreres med Service Discovery og Register-biblioteker, for eksempel Eureka Server og Consul:

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

6.1. LoadBalancerClient Filter

De LoadBalancerClientFilter ser etter en URI i eiendomsbytteattributtet ved hjelp av ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR.

Hvis nettadressen har en lb. ordning (f.eks. lb: // baeldung-service) den vil bruke vårskyen LoadBalancerClient for å løse navnet (dvs. baeldung-service) til en faktisk vert og port.

Den umodifiserte opprinnelige URL-en plasseres i ServerWebExchangeUtils.GATEWAY_ORIGINAL_REQUEST_URL_ATTR Egenskap.

7. Overvåking

Spring Cloud Gateway bruker Actuator API, et velkjent Spring-Boot-bibliotek som tilbyr flere out-of-the-box-tjenester for overvåking av applikasjonen.

Når Actuator API er installert og konfigurert, kan gatewayovervåkingsfunksjonene visualiseres ved å få tilgang til det /inngangsport/ endepunkt.

8. Implementering

Vi lager nå et enkelt eksempel på bruken av Spring Cloud Gateway som en proxy-server ved hjelp av sti predikat.

8.1. Avhengigheter

Spring Cloud Gateway er for øyeblikket i milepælerregisteret, på versjon 2.0.0.RC2. Dette er også versjonen vi bruker her.

For å legge til prosjektet bruker vi avhengighetsstyringssystemet:

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

Deretter legger vi til de nødvendige avhengighetene:

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

8.2. Kodeimplementering

Og nå oppretter vi en enkel rutekonfigurasjon i application.yml fil:

vår: sky: gateway: ruter: - id: baeldung_route uri: //baeldung.com predikater: - Path = / baeldung / management: endpoints: web: exposure: include: "* ' 

Og Gateway-applikasjonskoden:

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

Etter at applikasjonen starter, kan vi få tilgang til url: “// localhost / aktuator / gateway / routes / baeldung_route” for å sjekke all opprettet rutingskonfigurasjon:

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

Vi ser at den relative url: “/ Baeldung” er konfigurert som en rute,så treffer url “// localhost / baeldung” vi blir omdirigert til “//baeldung.com“, Som ble konfigurert i eksemplet vårt.

9. Konklusjon

I denne artikkelen utforsket vi noen av funksjonene og komponentene som er en del av Spring Cloud Gateway. Denne nye API-en gir out-of-the-box verktøy for gateway og proxy-støtte.

Eksemplene som presenteres her finner du i GitHub-depotet vårt.