Introduction à Spring Cloud Gateway
La version officielle de Spring Boot 2 vient de sortir il y a quelque temps. Spring Cloud Gateway est basé sur Spring Boot 2 et est un tout nouveau projet de Spring Cloud. Le projet fournit une passerelle API construite sur l'écosystème de printemps, notamment: Spring 5, Spring Boot 2 et Project Reactor. Spring Cloud Gateway est conçu pour fournir un moyen simple et efficace d'envoyer des API et de leur fournir des préoccupations transversales telles que: la sécurité, la surveillance / les mesures et la résilience. La dernière version actuelle est v2.0.0.m8, et la version officielle sera également bientôt là.
Caractéristiques de Spring Cloud Gateway:
vs Netflix Zuul
Zuul est basé sur le servlet 2.5 (en utilisant 3.x), en utilisant l'API de blocage. Il ne prend en charge aucune longue connexion telle que WebSockets. Alors que Gateway est construit sur Spring Framework 5, Project Reactor et Spring Boot 2, à l'aide d'une API non bloquante. WebSockets est pris en charge et sera une meilleure expérience de développement car elle est étroitement intégrée au printemps.
Pratique d'introduction de la passerelle Spring Cloud
L'auteur a récemment étudié le code source de Spring Cloud Gateway et a écrit des articles sur l'analyse du code source pour la plupart des fonctions, mais la version officielle n'a pas été publiée après tout. Cet article est une pratique d'introduction, montrant plusieurs fonctions couramment utilisées, et attend avec impatience la version de la dernière version officielle.
L'exemple démarre deux services: Gateway-Server et User-Server. Le scénario simulé est que le client demande le service backend et la passerelle fournit une entrée unifiée au service backend. Tous les services backend sont enregistrés auprès du service et consul trouvés (Build ZK et Eureka sont OK, et je suis plus habitué à utiliser Consul). La passerelle passe vers des services backend spécifiques grâce à l'équilibrage de charge.
Service utilisateur
Le service utilisateur est enregistré avec Consul et fournit une interface / test.
compter sur
Les dépendances requises sont les suivantes:
<dependency> <proupId> org.springframework.cloud </proupId> <Artifactid> Spring-Cloud-Starter-Consul-Discovery </Retifactid> </ Dependency> <Dependency> <ProupID> org.springFramework.boot </proupActid> <e-dépendance> Spring-Boot-starter-web </tatifactive>
Fichier de configuration
Spring: Application: Nom: User-Service Cloud: Consult: Host: 192.168.1.204 Port: 8500 Discovery: IP-Address: $ {host_address: localhost} port: $ {server_port: $ {server.port}} HealthCheckPath: / Health HealthCheckInterval: Port-id: user - user - $ {Server.Port} Service-Name: Userver: Port-ID: User - $ {server. 8005 Management: Sécurité: Activé: FalseExposer l'interface
@ SpringbootApplication @ restController @ activéSiScoveryClientPublic class GatewayUserApplication {public static void main (String [] args) {SpringApplication.Run (GatewayUserApplication.class, args); } @Getmapping ("/ test") public String test () {return "ok"; }}Exposez / tester l'interface et retournez OK.
Services de passerelle
Gateway Service fournit une variété de configurations de routage, d'usines d'assertion de routage et d'usines de filtre.
compter sur
Dépendances qui doivent être introduites:
<dependency> <proupId> org.springframework.boot </proupId> <ArtifactId> Spring-boot-actuator </ artifactive> </dependency> // Dependency sur webflux, il est nécessaire d'introduire <Dependency> <proupId> org.springframework.boot </proupId> <ArtefactId> Spring-Boot-starter-webflux </letefactive> </dependency> <dependency> <proupId> org.springframework.cloud </proupId> <ArtefactId> Spring-Cloud-Gateway-core </ artifactid> </sidency> // Service Discovery Component, excluant les dépendances <dépendance> <GroupId> org.springframework.cloud </proupId> <Artifactid> Spring-Cloud-Starter-Consul-Discovery </ Artifactid> <DERVERSE> 2.0.0.m6 </ Version> <clusion> <cuslision> <proupId> org.springframework.boot </prountid> <ArtifActid> Spring-Boot-starterweb </prouverID> </ exclusion> </ exclusions> </ dépendances> // Kotlin Dependency <Dedency> <ProupId> org.Jetbrains.kotlin </prouverid> <ArtifActid> Kotlin-stdlib </ artifactid> </prètement> $ {Kotlin.Version} </DERNIFROITION> <o optional> </ option> </Dedency> <Dedency> <GroupId> org.jetbrains.kotlin </prôdId> <ErtifactId> Kotlin-reflect </ artifactive> <version> $ {kotlin.version} </preinte> <ochotéal> true </acultieal> </peedency>Comme mentionné ci-dessus, les dépendances liées à Kotlin sont introduites et la configuration de routage de Kotlin doit être prise en charge ici. L'utilisation de la passerelle Spring Cloud nécessite de l'exclusion des configurations liées au Web. Il introduit des références à WebFlux. Il sera vérifié au début de l'application et doit être introduit.
Usine d'assertion de routage
Il existe de nombreux types d'usines d'assurance de routage, selon l'heure de la demande, l'hôte, le chemin, la méthode, etc. La définition suivante est une correspondance d'assurance d'itinéraire basée sur le chemin.
@BeanPublic RouterFunction <ServerResponse> TestFunrouterFunction () {RouterFunction <SistryResponse> Route = RouterFunctions.Route (requestPredicates.path ("/ testfun"), demande -> ServerResponse.ok (). Body (bodyInserters.fromObject ("Hello")); route de retour;}Lorsque le chemin demandé est / testfun, le code d'état d'OK est directement renvoyé et le corps de réponse est une chaîne Hello.
Usine de filtre
Les passerelles doivent souvent filtrer les demandes de routage et effectuer certaines opérations, telles que la construction d'en-têtes après l'authentification. Il existe de nombreux types de filtrage, tels que l'ajout d'en-têtes de demande, l'ajout de paramètres de demande, l'ajout d'en-têtes de réponse et de disjoncteurs, etc.
@BeanPublic Routelocator CustomRouteLlocator (Builder de RoutelocatorBuilder, ThrottlegatewayFilterFactory Throttle) {// @ formatter: off return builder.routes () .Route (r -> r.path ("/ image / webother") .filters ")") .uri ("http://httpbin.org:80")) .build (); // @ format: on}Comme ci-dessus, lorsque le chemin de demande est / image / webp, la demande est transmise à http://httpbin.org:80, et la réponse est filtrée, ajoutant l'en-tête de réponse x-anotherheader: baz.
Routage personnalisé
Les deux sous-sections ci-dessus appartiennent au routage personnalisé de l'API et peuvent également être définies par configuration:
Spring: Cloud: Gateway: Locator: Activé: True par défaut-filtres: - AddResponseHeader = X-Response-Default-Foo, Routes de la barre par défaut: # =================================================================================================================================. =================================================================================================================================. =================================================================================================================================. ===================================================================================================================================.
La configuration ci-dessus définit le routage et les filtres. Le filtre global ajoute toutes les réponses à l'en-tête X-Response-Default-Foo: par défaut-barre. L'itinéraire avec id default_path_to_http est défini, mais la priorité est relativement faible. Lorsque la demande ne peut pas correspondre, elle sera transmise sur blueskykong.com.
routage personnalisé de Kotlin
Spring Cloud Gateway peut utiliser Kotlin pour personnaliser le routage:
@Configurationclass supplémentaireRoutes {@bean fun supplémentaireRouteLOcator (builder: routelocatorBuilder): routelocator = builder.routes {route (id = "test-kotlin") {path ("/ image / png") filters {addreSponse uri ("http://httpbin.org:80")}}}Lorsque le chemin demandé est / image / png, il sera transmis à http://httpbin.org:80, et un filtre est défini, et un en-tête X-TestHeader: Foobar est ajouté à son en-tête de réponse.
Composants de découverte de service
Combiné avec l'enregistrement de service dans le composant Discovery, transmis à l'instance de service spécifique via ServiceId. Les dépendances correspondantes ont été introduites dans la configuration précédente.
@BeanPublic RouteDeFinitionlocator DiscoveryClientRouteDefinitionLocator (DiscoveryClient DiscoveryClient) {return new DiscoveryClientRouteDefinitionLocator (DiscoveryClient);} Injectez DiscoveryClient dans le constructeur de DiscoveryClientRouteDefinitionLocator. L'analyse du code source sera expliquée plus loin et ne sera pas élargie ici.
Spring: Cloud: Gateway: Locator: Activé: True par défaut-filtres: - AddResponseHeader = X-Response-Default-Foo, Routes de la barre par défaut: # ================================================================================================================================. - stripprefix = 1
La configuration ci-dessus permet l'implémentation du localisateur DiscoveryClient. L'itinéraire définit que toutes les demandes qui commencent par / utilisateur seront transmises au service utilisateur et que le filtre de chemin sera appliqué pour intercepter la première partie du préfixe du chemin. Autrement dit, la demande réelle d'accès / utilisateur / test est convertie en lb: // utilisateur / test.
websocket
Vous pouvez également configurer le routage de la passerelle de WebSocket:
Spring: Cloud: Gateway: défaut de défaut: - AddRaSesonseHeader = X-Response-Default-Foo, par défaut-barre: - ID: WebSocket_Test Uri: ws: // localhost: 9000 Commande: 9000 prédicats: - path = / echo
Démarrez un WS Server WSCAT --LISTEN 9000, démarrez la passerelle (le port de passerelle est 9090) et connectez le client à WSCAT --connect ws: // localhost: 9090 / echo.
Accès au client
Les lecteurs peuvent télécharger le code source pour essayer les fonctions ci-dessus. Ici, je montre uniquement les résultats de l'accès aux services utilisateurs:
La passerelle a réussi à chargement pour un serveur et a renvoyé OK. L'en-tête de réponse contient l'en-tête des paramètres du filtre global X-Response-Default-Foo: Bar par défaut
Résumer
Dans cet article, nous explorons certaines des fonctionnalités et composants qui appartiennent à Spring Cloud Gateway. Cette nouvelle API fournit des outils prêts à l'emploi pour la prise en charge de la passerelle et de la proxy. Dans l'attente de la version officielle de Spring Cloud Gateway 2.0.
Adresse de code source
https://github.com/keets2012/spring-cloud_sample
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.