Istražujući New Spring Cloud Gateway

1. Pregled

U ovom ćemo članku istražiti glavne značajke projekta Spring Cloud Gateway, novog API-ja temeljenog na Spring 5, Spring Boot 2 i Project Reactor.

Alat nudi gotove mehanizme usmjeravanja koji se često koriste u aplikacijama mikroservisa kao način skrivanja više usluga iza jedne fasade.

Za objašnjenje uzorka Gatewaya bez projekta Spring Cloud Gateway pogledajte naš prethodni članak.

2. Rukovatelj usmjeravanjem

Fokusiran na zahtjeve za usmjeravanje, Spring Cloud Gateway prosljeđuje zahtjeve na Mape Gateway Handler Mapping - koji određuje što treba učiniti sa zahtjevima koji odgovaraju određenoj ruti.

Počnimo s brzim primjerom kako Gateway Handler rješava konfiguracije ruta pomoću 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") .and () .path ("/ myOtherRouting") .filters (f -> f.prefixPath ("/ myPrefix")) .uri ("// othersite.com") .id ("myOtherID")) .build (); }

Primijetite kako smo iskoristili glavne gradivne dijelove ovog API-ja:

  • Ruta - primarni API pristupnika. Definiran je danom identifikacijom (ID), odredištem (URI) i skupom predikata i filtara
  • Predikat - Java 8-e Predikat - koja se koristi za podudaranje HTTP zahtjeva pomoću zaglavlja, metoda ili parametara
  • Filtar - standardni proljetni WebFilter

3. Dinamičko usmjeravanje

Baš poput Zuula, Spring Cloud Gateway pruža sredstva za usmjeravanje zahtjeva prema različitim uslugama.

Konfiguracija usmjeravanja može se stvoriti korištenjem čiste Java (RouteLocator, kao što je prikazano u primjeru u odjeljku 2.1) ili pomoću konfiguracije svojstava:

spring: application: name: gateway-service cloud: gateway: routes: - id: baeldung uri: baeldung.com - id: myOtherRouting uri: localhost: 9999

4. Tvornice usmjeravanja

Spring Cloud Gateway podudara se s rutama koristeći Spring WebFlux HandlerMapping infrastruktura.

Također uključuje mnoge ugrađene tvornice predikatnih ruta. Svi se ti predikati podudaraju s različitim atributima HTTP zahtjeva. Više tvornica predikata rute može se kombinirati putem logičkog "i".

Podudaranje rute može se primijeniti programski ili putem datoteke svojstava konfiguracije koristeći drugu vrstu tvornica predikata rute.

Naš članak Spring Cloud Gateway Routing Predicate Factories detaljnije istražuje tvornice usmjeravanja.

5. Tvornice WebFilter

Filteri usmjeravanja omogućuju izmjenu dolaznog HTTP zahtjeva ili odlaznog HTTP odgovora.

Spring Cloud Gateway uključuje mnoge ugrađene tvornice WebFilter, kao i mogućnost stvaranja prilagođenih filtara.

Naš članak Spring Cloud Gateway WebFilter Factories detaljnije istražuje tvornice WebFilter.

6. Spring Cloud DiscoveryClient podrška

Spring Cloud Gateway može se lako integrirati s knjižnicama Discovery Service i Registry, kao što su Eureka Server i Consul:

@Configuration @EnableDiscoveryClient javna klasa GatewayDiscoveryConfiguration {@Bean public DiscoveryClientRouteDefinitionLocator discoveryClientRouteLocator (DiscoveryClient discoveryClient) {return new DiscoveryClientRouteDefinitionLocator (discoveryClient); }}

6.1. LoadBalancerClient filtar

The LoadBalancerClientFilter traži URI u svojstvu atributa razmjene pomoću ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR.

Ako URL ima lb shema (npr. lb: // baeldung-service) koristit će proljetni oblak LoadBalancerClient riješiti ime (tj. baeldung-usluga) na stvarni host i port.

Nepromijenjeni izvorni URL postavlja se u ServerWebExchangeUtils.GATEWAY_ORIGINAL_REQUEST_URL_ATTR atribut.

7. Praćenje

Spring Cloud Gateway koristi Actuator API, poznatu Spring-Boot biblioteku koja pruža nekoliko gotovih usluga za nadzor aplikacije.

Jednom kada se Actuator API instalira i konfigurira, pristupom se mogu vizualizirati značajke nadzora pristupnika / gateway / krajnja točka.

8. Provedba

Sada ćemo stvoriti jednostavan primjer upotrebe Spring Cloud Gateway-a kao proxy poslužitelja koji koristi staza predikat.

8.1. Ovisnosti

Spring Cloud Gateway trenutno se nalazi u spremištu ključnih događaja, na verziji 2.0.0.RC2. Ovo je ujedno i inačica koju ovdje koristimo.

Da bismo dodali projekt, upotrijebit ćemo sustav upravljanja ovisnostima:

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

Zatim ćemo dodati potrebne ovisnosti:

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

8.2. Implementacija koda

I sada kreiramo jednostavnu konfiguraciju usmjeravanja u primjena.iml datoteka:

spring: cloud: gateway: routes: - id: baeldung_route uri: //baeldung.com predikati: - Path = / baeldung / management: krajnje točke: web: izloženost: uključuju: "* ' 

I kod aplikacije Gateway:

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

Nakon pokretanja aplikacije možemo pristupiti url-u: “// localhost / actuator / gateway / routes / baeldung_route” za provjeru svih kreiranih konfiguracija usmjeravanja:

{"id": "baeldung_route", "predikati": [{"name": "Put", "args": {"_ genkey_0": "/ baeldung"}}], "filtri": [], "uri" : "// baeldung.com", "order": 0}

Vidimo da je relativni url: "/ Baeldung" je konfiguriran kao ruta,pa udarajući url “// localhost / baeldung” bit ćemo preusmjereni na “//baeldung.com“, Kao što je konfigurirano u našem primjeru.

9. Zaključak

U ovom smo članku istražili neke značajke i komponente koje su dio Spring Cloud Gatewaya. Ovaj novi API nudi gotove alate za podršku pristupnika i proxyja.

Ovdje predstavljeni primjeri mogu se naći u našem GitHub spremištu.


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