Explorer la nouvelle passerelle Spring Cloud

1. Vue d'ensemble

Dans cet article, nous explorerons les principales fonctionnalités du projet Spring Cloud Gateway, une nouvelle API basée sur Spring 5, Spring Boot 2 et Project Reactor.

L'outil fournit des mécanismes de routage prêts à l'emploi souvent utilisés dans les applications de microservices pour masquer plusieurs services derrière une seule façade.

Pour une explication du modèle de passerelle sans le projet Spring Cloud Gateway, consultez notre article précédent.

2. Gestionnaire de routage

En se concentrant sur les demandes de routage, Spring Cloud Gateway transmet les demandes à un mappage de gestionnaire de passerelle - qui détermine ce qui doit être fait avec les demandes correspondant à un itinéraire spécifique.

Commençons par un exemple rapide de la façon dont le gestionnaire de passerelle résout les configurations d'itinéraire à l'aide de 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(); }

Remarquez comment nous avons utilisé les principaux éléments constitutifs de cette API:

  • Route - l'API principale de la passerelle. Il est défini par une identification (ID) donnée, une destination (URI) et un ensemble de prédicats et de filtres
  • Prédicat - un prédicat Java 8 - utilisé pour faire correspondre les requêtes HTTP à l'aide d'en-têtes, de méthodes ou de paramètres
  • Filtre - un WebFilter Spring standard

3. Routage dynamique

Tout comme Zuul, Spring Cloud Gateway fournit des moyens pour acheminer les demandes vers différents services.

La configuration de routage peut être créée en utilisant pur Java ( RouteLocator , comme indiqué dans l'exemple de la section 2.1) ou en utilisant la configuration des propriétés:

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

4. Usines de routage

Spring Cloud Gateway fait correspondre les routes à l'aide de l' infrastructure Spring WebFlux HandlerMapping .

Il comprend également de nombreuses usines de prédicats d'itinéraire intégrées. Tous ces prédicats correspondent à différents attributs de la requête HTTP. Plusieurs usines de prédicat d'itinéraire peuvent être combinées via le «et» logique.

La correspondance d'itinéraire peut être appliquée à la fois par programme ou via le fichier de propriétés de configuration en utilisant un type différent d'usines de prédicat d'itinéraire.

Notre article Spring Cloud Gateway Routing Predicate Factories explore plus en détail les usines de routage.

5. Usines WebFilter

Les filtres de route rendent possible la modification de la requête HTTP entrante ou de la réponse HTTP sortante.

Spring Cloud Gateway comprend de nombreuses usines WebFilter intégrées ainsi que la possibilité de créer des filtres personnalisés.

Notre article Spring Cloud Gateway WebFilter Factories explore les usines WebFilter plus en détail.

6. Prise en charge de Spring Cloud DiscoveryClient

Spring Cloud Gateway peut être facilement intégré aux bibliothèques Service Discovery et Registry, telles que Eureka Server et Consul:

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

6.1. Filtre LoadBalancerClient

Le LoadBalancerClientFilter cherche un URI dans la propriété d'attribut d'échange en utilisant ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR.

Si l'URL a un schéma lb (par exemple, lb: // baeldung-service), elle utilisera Spring Cloud LoadBalancerClient pour résoudre le nom (c'est-à-dire baeldung-service) en un hôte et un port réels.

L'URL d'origine non modifiée est placée dans l' attribut ServerWebExchangeUtils.GATEWAY_ORIGINAL_REQUEST_URL_ATTR .

7. Suivi

Spring Cloud Gateway utilise l'API Actuator, une bibliothèque Spring-Boot bien connue qui fournit plusieurs services prêts à l'emploi pour surveiller l'application.

Une fois l'API de l'actionneur installée et configurée, les fonctionnalités de surveillance de la passerelle peuvent être visualisées en accédant à / gateway / endpoint.

8. Mise en œuvre

Nous allons maintenant créer un exemple simple d'utilisation de Spring Cloud Gateway en tant que serveur proxy en utilisant le prédicat de chemin .

8.1. Dépendances

La Spring Cloud Gateway est actuellement dans le référentiel des jalons, sur la version 2.0.0.RC2. C'est également la version que nous utilisons ici.

Pour ajouter le projet, nous utiliserons le système de gestion des dépendances:

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

Ensuite, nous ajouterons les dépendances nécessaires:

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

8.2. Implémentation du code

Et maintenant, nous créons une configuration de routage simple dans le fichier application.yml :

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

Et le code de l'application Gateway:

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

Après le démarrage de l'application, nous pouvons accéder à l'url: «// localhost / actuator / gateway / routes / baeldung_route» pour vérifier toute la configuration de routage créée:

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

On voit que l'url relative: "/ baeldung" est configurée comme une route,donc en cliquant sur l'url "// localhost / baeldung", nous serons redirigés vers " //baeldung.com ", comme cela a été configuré dans notre exemple.

9. Conclusion

Dans cet article, nous avons exploré certaines des fonctionnalités et composants qui font partie de Spring Cloud Gateway. Cette nouvelle API fournit des outils prêts à l'emploi pour la prise en charge de la passerelle et du proxy.

Les exemples présentés ici se trouvent dans notre référentiel GitHub.