Une passerelle de services aiguille les requêtes entrantes des clients vers les microservices back-end selon des règles configurables (chemin URL, en-têtes ou paramètres de requête). Cette rubrique explique comment créer une passerelle avec Nacos comme registre de services, en utilisant Spring Cloud Gateway ou Spring Cloud Netflix Zuul.
Pour ignorer la configuration détaillée, téléchargez les projets de démonstration complets :
Fonctionnement du routage des requêtes avec Spring Cloud Gateway
Spring Cloud Gateway traite les requêtes à l'aide de trois concepts fondamentaux :
| Concept | Description |
|---|---|
| Route | Élément de base. Chaque route associe une requête entrante à un service back-end. Elle se définit par un ID, un URI de destination, un ou plusieurs prédicats et des filtres optionnels. |
| Predicate | Condition de correspondance évaluée sur la requête entrante (chemin, en-tête, paramètre de requête, etc.). Une route correspond lorsque tous ses prédicats renvoient la valeur true. |
| Filter | Étape de traitement qui modifie la requête ou la réponse avant ou après le transfert. Par exemple, StripPrefix=1 supprime le premier segment du chemin avant d'envoyer la requête en aval. |
Flux de requête : Client -> Mappage du gestionnaire de passerelle (correspondance de route par évaluation des prédicats) -> Gestionnaire Web de passerelle (exécution de la chaîne de filtres) -> Service back-end. Les filtres s'exécutent avant et après la requête proxy, ce qui permet de modifier les en-têtes, de réécrire les chemins ou d'ajouter une authentification au niveau de la passerelle.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Maven installé avec les variables d'environnement configurées
La dernière version de Nacos Server téléchargée
-
Facultatif :
Lors du développement local d'applications, vous pouvez utiliser le plug-in Alibaba Cloud Toolkit pour activer les appels mutuels entre les applications locales et celles déployées dans EDAS (interconnexion end-to-cloud). Cela évite la configuration d'un VPN et améliore l'efficacité du développement. Pour plus d'informations, consultez la section Présentation de l'interconnexion end-to-cloud.
Démarrage de Nacos Server
Décompressez le package Nacos Server téléchargé.
-
Accédez au répertoire
nacos/binet démarrez Nacos Server en mode autonome :-
Linux, UNIX ou macOS :
sh startup.sh -m standalone Windows : double-cliquez sur
startup.cmd.
-
Création d'une passerelle de services avec Spring Cloud Gateway
Spring Cloud Gateway repose sur Project Reactor et Spring WebFlux, offrant ainsi une passerelle réactive et non bloquante.
Étape 1 : Création du projet de passerelle
Créez un projet Maven nommé
spring-cloud-gateway-nacos.-
Ajoutez les dépendances suivantes au fichier
pom.xml. Cet exemple utilise Spring Boot 2.1.4.RELEASE et Spring Cloud Greenwich.SR1 :<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.4.RELEASE</version> <relativePath/> </parent> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.1.1.RELEASE</version> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Greenwich.SR1</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> -
Créez la classe de démarrage
GatewayApplication:@SpringBootApplication @EnableDiscoveryClient public class GatewayApplication { public static void main(String[] args) { SpringApplication.run(GatewayApplication.class, args); } }
Étape 2 : Configuration des règles de routage
Ajoutez la configuration suivante au fichier application.yaml. Remplacez 127.0.0.1:8848 par l'adresse réelle de votre serveur Nacos s'il s'exécute sur une machine différente.
server:
port: 18012
spring:
application:
name: spring-cloud-gateway-nacos
cloud:
gateway:
routes:
- id: service-provider
uri: lb://service-provider
predicates:
- Path=/provider1/**
filters:
- StripPrefix=1
nacos:
discovery:
server-addr: 127.0.0.1:8848
Cette configuration de route fonctionne comme suit :
| Composant | Valeur | Description |
|---|---|---|
| Predicate | Path=/provider1/** |
Correspond à toutes les requêtes dont le chemin commence par /provider1/. |
| URI | lb://service-provider |
Transfère les requêtes correspondantes au service service-provider via l'équilibrage de charge côté client. |
| Filter | StripPrefix=1 |
Supprime le premier segment du chemin avant le transfert. Par exemple, /provider1/echo/hello devient /echo/hello. |
Étape 3 : Démarrage de la passerelle et vérification de l'enregistrement
Exécutez la méthode principale de
GatewayApplicationpour démarrer la passerelle.Ouvrez la console Nacos Server à l'adresse
http://127.0.0.1:8848/nacos(nom d'utilisateur et mot de passe par défaut :nacos).Dans le volet de navigation, choisissez Service Management > Services. Confirmez que
spring-cloud-gateway-nacosapparaît dans la liste des services.
Création d'une passerelle de services avec Spring Cloud Netflix Zuul
Zuul est une autre option de passerelle basée sur un modèle d'E/S bloquant. Il convient aux applications utilisant déjà la pile Netflix OSS.
Étape 1 : Création du projet de passerelle
Créez un projet Maven nommé
spring-cloud-zuul-nacos.-
Ajoutez les dépendances suivantes au fichier
pom.xml. Cet exemple utilise Spring Boot 2.1.4.RELEASE, Spring Cloud Greenwich.SR1 et Spring Cloud Alibaba 0.9.0 :<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.4.RELEASE</version> <relativePath/> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.1.1.RELEASE</version> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Greenwich.SR1</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> -
Créez la classe de démarrage
ZuulApplication:@SpringBootApplication @EnableZuulProxy @EnableDiscoveryClient public class ZuulApplication { public static void main(String[] args) { SpringApplication.run(ZuulApplication.class, args); } }
Étape 2 : Configuration des règles de routage
Ajoutez la configuration suivante au fichier application.properties. Remplacez 127.0.0.1:8848 par l'adresse réelle de votre serveur Nacos s'il s'exécute sur une machine différente.
spring.application.name=spring-cloud-zuul-nacos
server.port=18022
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
zuul.routes.opensource-provider1.path=/provider1/**
zuul.routes.opensource-provider1.serviceId=service-provider
Cette configuration route toutes les requêtes dont le chemin commence par /provider1/ vers le service back-end service-provider.
Étape 3 : Démarrage de la passerelle et vérification de l'enregistrement
Exécutez la méthode principale de
ZuulApplicationpour démarrer la passerelle.Ouvrez la console Nacos Server à l'adresse
http://127.0.0.1:8848/nacos(nom d'utilisateur et mot de passe par défaut :nacos).Dans le volet de navigation, choisissez Service Management > Services. Confirmez que
spring-cloud-zuul-nacosapparaît dans la liste des services.
Création d'un fournisseur de services
Spring Cloud Gateway et Zuul nécessitent tous deux un service en aval vers lequel transférer les requêtes. Pour plus de détails, consultez la section Implémentation de l'enregistrement et de la découverte de services.
L'exemple suivant crée un fournisseur de services minimal avec un seul endpoint /echo/{string} :
@SpringBootApplication
@EnableDiscoveryClient
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
@RestController
public class EchoController {
@RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)
public String echo(@PathVariable String string) {
return string;
}
}
}
Vérification du transfert des requêtes
Vérification locale
Démarrez la passerelle et le fournisseur de services, puis envoyez une requête via la passerelle.
Pour Spring Cloud Gateway (port 18012) :
curl http://127.0.0.1:18012/provider1/echo/hello
Pour Zuul (port 18022) :
curl http://127.0.0.1:18022/provider1/echo/hello
Une réponse réussie renvoie hello, confirmant que la passerelle a transféré la requête à service-provider et supprimé le préfixe /provider1.

Déploiement sur EDAS
Déployez l'application sur Enterprise Distributed Application Service (EDAS). Pour les instructions de déploiement, consultez la section Implémentation de l'enregistrement et de la découverte de services.
Le registre de services EDAS est une version commerciale de Nacos. Lors du déploiement sur EDAS, la plateforme configure automatiquement les détails de connexion Nacos : adresse IP, port de service, namespace, AccessKey ID, AccessKey secret et chemin de contexte. Aucune configuration supplémentaire n'est requise. Conservez ou supprimez les paramètres Nacos locaux d'origine selon vos besoins.
Compatibilité des versions
| Version de Spring Cloud | Version de Spring Cloud Alibaba |
|---|---|
| Greenwich | 2.1.1.RELEASE |
| Finchley | 2.0.1.RELEASE |
| Edgware | 1.5.1.RELEASE |
Spring Cloud Edgware a atteint sa fin de vie. Ne l'utilisez pas pour de nouvelles applications.