In modernen Microservices-Architekturen ist ein API-Gateway unerlässlich. Es bietet einen einzigen Einstiegspunkt für mehrere Dienste und ermöglicht uns die Verwaltung von Routing, Sicherheit, Ratenbegrenzung, Lastausgleich und mehr. In diesem Artikel erfahren Sie, wie Sie mit Spring Cloud Gateway ein einfaches API-Gateway einrichten und Anfragen basierend auf Pfaden an verschiedene Endpunkte weiterleiten. Wir zeigen auch, wie Sie Filter verwenden, um Pfade dynamisch zu manipulieren.
Lassen Sie uns in den Code eintauchen!
Um mitzumachen, benötigen Sie:
Erstellen Sie ein neues Spring Boot-Projekt und beziehen Sie die Abhängigkeit Spring Cloud Gateway ein. Sie können dies ganz einfach tun, indem Sie ein neues Projekt auf Spring Initializr einrichten und unter Abhängigkeiten Spring Boot und Reactive Spring Cloud Gateway auswählen.
Hier ist das pom.xml-Snippet:
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>io.projectreactor</groupId> <artifactId>reactor-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-contract-stub-runner</artifactId> <scope>test</scope> </dependency> </dependencies>
Lassen Sie uns unser Gateway so konfigurieren, dass es Anfragen für drei verschiedene Pfade verarbeitet:
„Wir werden die REST-Länder-API verwenden, um die anderen Microservices zu simulieren, die wir in unserer Architektur haben.“
Ich habe einen Ordner namens „router“ in der Nähe der Hauptdatei der Anwendung erstellt. Darin erstellen wir eine Datei namens Routes.java, in der wir unsere Routen definieren, jeden Pfad konfigurieren und Filter auf dynamisch direkte Anfragen anwenden.
package dev.mspilari.api_gateway.router; import org.springframework.cloud.gateway.route.RouteLocator; import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class Routes { @Bean public RouteLocator routeLocator(RouteLocatorBuilder builder) { return builder.routes() .route("country_route", p -> p .path("/get/country/{name}") .filters(f -> f.setPath("/v3.1/name/{name}")) .uri("https://restcountries.com")) .route("language_route", p -> p .path("/get/language/{name}") .filters(f -> f.setPath("/v3.1/lang/{name}")) .uri("https://restcountries.com")) .route("subregion_route", p -> p .path("/get/subregion/{name}") .filters(f -> f.setPath("/v3.1/subregion/{name}")) .uri("https://restcountries.com")) .build(); } }
Routendefinitionen: Wir definieren jede Route mithilfe der Routenmethode, die eine Kennung (z. B. Country_Route) und ein Lambda benötigt, das den Pfad definiert.
Pfadabgleich: .path("/get/country/{name}") wird verwendet, um das eingehende URL-Muster abzugleichen. {name} ist eine Variable, die dynamisch durch einen beliebigen Wert ersetzt werden kann, beispielsweise einen Ländernamen wie „Brasilien“.
Filter: Wir verwenden SetPath, um den ausgehenden Anforderungspfad zu ändern. Beispielsweise schreibt .setPath("/v3.1/name/{name}") /get/country/{name} in /v3.1/name/{name} um, den von der REST Countries API benötigten Endpunkt.
URI: Wir setzen die URI auf https://restcountries.com, die als Basis-URL dient. Spring Cloud Gateway sendet den geänderten Pfad an diesen URI.
Starten Sie Ihre Spring Boot-Anwendung. Jetzt können Sie Anfragen an das Gateway stellen und es leitet sie an den richtigen Endpunkt weiter.
Probieren Sie die folgenden Befehle in Ihrem Terminal aus, um die Routen zu testen:
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>io.projectreactor</groupId> <artifactId>reactor-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-contract-stub-runner</artifactId> <scope>test</scope> </dependency> </dependencies>
Jede Anfrage wird vom Gateway basierend auf dem Pfad und den Parametern an den jeweiligen REST-Länder-API-Endpunkt weitergeleitet.
Wenn alles richtig konfiguriert ist, sollten Sie Antworten sehen, die denen entsprechen, die Sie erhalten würden, wenn Sie die REST-Länder-API direkt aufrufen.
Zum Beispiel:
package dev.mspilari.api_gateway.router; import org.springframework.cloud.gateway.route.RouteLocator; import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class Routes { @Bean public RouteLocator routeLocator(RouteLocatorBuilder builder) { return builder.routes() .route("country_route", p -> p .path("/get/country/{name}") .filters(f -> f.setPath("/v3.1/name/{name}")) .uri("https://restcountries.com")) .route("language_route", p -> p .path("/get/language/{name}") .filters(f -> f.setPath("/v3.1/lang/{name}")) .uri("https://restcountries.com")) .route("subregion_route", p -> p .path("/get/subregion/{name}") .filters(f -> f.setPath("/v3.1/subregion/{name}")) .uri("https://restcountries.com")) .build(); } }
Dieses Setup deckt die Grundlagen des Routings mit Spring Cloud Gateway ab. In den nächsten Beiträgen werden wir zusätzliche Funktionen erkunden, wie zum Beispiel:
Das obige ist der detaillierte Inhalt vonErstellen eines einfachen API-Gateways mit Spring Cloud Gateway. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!