Erkundung des neuen Spring Cloud Gateway

1. Übersicht

In diesem Artikel werden die Hauptfunktionen des Spring Cloud Gateway-Projekts erläutert, einer neuen API, die auf Spring 5, Spring Boot 2 und Project Reactor basiert.

Das Tool bietet sofort einsatzbereite Routing-Mechanismen, die häufig in Microservices-Anwendungen verwendet werden, um mehrere Services hinter einer einzigen Fassade zu verbergen.

Eine Erläuterung des Gateway-Musters ohne das Spring Cloud Gateway-Projekt finden Sie in unserem vorherigen Artikel.

2. Routing-Handler

Das Spring Cloud Gateway konzentriert sich auf das Weiterleiten von Anforderungen und leitet Anforderungen an ein Gateway-Handler-Mapping weiter. Hier wird festgelegt, was mit Anforderungen geschehen soll, die einer bestimmten Route entsprechen.

Beginnen wir mit einem kurzen Beispiel, wie der Gateway-Handler Routenkonfigurationen mithilfe von RouteLocator auflöst:

@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(); }

Beachten Sie, wie wir die Hauptbausteine ​​dieser API verwendet haben:

  • Route - die primäre API des Gateways. Es wird durch eine bestimmte Identifikation (ID), ein Ziel (URI) und eine Reihe von Prädikaten und Filtern definiert
  • Prädikat - ein Java 8- Prädikat - wird zum Abgleichen von HTTP-Anforderungen mithilfe von Headern, Methoden oder Parametern verwendet
  • Filter - ein Standard- WebFilter von Spring

3. Dynamisches Routing

Genau wie Zuul bietet Spring Cloud Gateway die Möglichkeit, Anforderungen an verschiedene Dienste weiterzuleiten.

Die Routing-Konfiguration kann mithilfe von reinem Java ( RouteLocator , wie im Beispiel in Abschnitt 2.1 gezeigt) oder mithilfe der Eigenschaftenkonfiguration erstellt werden:

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

4. Routing-Fabriken

Spring Cloud Gateway stimmt Routen mithilfe der Spring WebFlux HandlerMapping- Infrastruktur ab.

Es enthält auch viele integrierte Routenprädikatenfabriken. Alle diese Prädikate stimmen mit unterschiedlichen Attributen der HTTP-Anforderung überein. Mehrere Route Predicate Factories können über das logische „und“ kombiniert werden.

Der Routenabgleich kann sowohl programmgesteuert als auch über eine Konfigurationseigenschaftendatei mit einem anderen Typ von Route Predicate Factories angewendet werden.

In unserem Artikel Spring Cloud Gateway Routing Predicate Factories werden Routing-Fabriken genauer untersucht.

5. WebFilter-Fabriken

Routenfilter ermöglichen die Änderung der eingehenden HTTP-Anforderung oder der ausgehenden HTTP-Antwort.

Spring Cloud Gateway enthält viele integrierte WebFilter-Fabriken sowie die Möglichkeit, benutzerdefinierte Filter zu erstellen.

In unserem Artikel Spring Cloud Gateway WebFilter Factories werden WebFilter-Fabriken ausführlicher beschrieben.

6. Spring Cloud DiscoveryClient-Unterstützung

Spring Cloud Gateway kann problemlos in Service Discovery- und Registrierungsbibliotheken wie Eureka Server und Consul integriert werden:

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

6.1. LoadBalancerClient Filter

Der LoadBalancerClientFilter sucht mithilfe von ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR nach einem URI in der Exchange-Attributeigenschaft .

Wenn die URL ein lb- Schema hat (z. B. lb: // baeldung-service) , verwendet sie den Spring Cloud LoadBalancerClient , um den Namen (dh baeldung-service) in einen tatsächlichen Host und Port aufzulösen .

Die unveränderte ursprüngliche URL wird im Attribut ServerWebExchangeUtils.GATEWAY_ORIGINAL_REQUEST_URL_ATTR abgelegt .

7. Überwachung

Spring Cloud Gateway verwendet die Actuator-API, eine bekannte Spring-Boot-Bibliothek, die mehrere sofort einsatzbereite Dienste zur Überwachung der Anwendung bereitstellt.

Sobald die Actuator-API installiert und konfiguriert ist, können die Gateway-Überwachungsfunktionen durch Zugriff auf / gateway / endpoint visualisiert werden .

8. Implementierung

Wir werden nun ein einfaches Beispiel für die Verwendung von Spring Cloud Gateway als Proxy - Server mit dem erstellen Pfad Prädikat.

8.1. Abhängigkeiten

Das Spring Cloud Gateway befindet sich derzeit im Meilenstein-Repository in Version 2.0.0.RC2. Dies ist auch die Version, die wir hier verwenden.

Um das Projekt hinzuzufügen, verwenden wir das Abhängigkeitsverwaltungssystem:

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

Als nächstes fügen wir die erforderlichen Abhängigkeiten hinzu:

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

8.2. Code-Implementierung

Und jetzt erstellen wir eine einfache Routing-Konfiguration in der Datei application.yml :

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

Und der Gateway-Anwendungscode:

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

Nach dem Start der Anwendung können wir auf die URL "// localhost / actuator / gateway / routen / baeldung_route" zugreifen , um alle erstellten Routing-Konfigurationen zu überprüfen:

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

Wir sehen, dass die relative URL: "/ baeldung" als Route konfiguriert ist,Wenn Sie also auf die URL "// localhost / baeldung" klicken, werden wir zu " //baeldung.com " weitergeleitet, wie in unserem Beispiel konfiguriert.

9. Fazit

In diesem Artikel haben wir einige der Funktionen und Komponenten untersucht, die Teil von Spring Cloud Gateway sind. Diese neue API bietet sofort einsatzbereite Tools für die Gateway- und Proxy-Unterstützung.

Die hier vorgestellten Beispiele finden Sie in unserem GitHub-Repository.