Tous les produits
Search
Centre de documentation

Serverless App Engine:Use Spring Cloud to develop microservice applications and deploy them to SAE

Dernière mise à jour :Aug 11, 2026

Ce tutoriel vous guide pas à pas dans la création de deux microservices Spring Cloud — un fournisseur de service et un consommateur de service — à partir de zéro. Vous les testerez localement grâce à l'enregistrement et à la découverte de services Nacos, puis vous déploierez les deux applications sur Serverless App Engine (SAE).

À l'issue de ce processus, le consommateur découvrira et appellera le fournisseur via Nacos, le tout s'exécutant en production sur SAE.

Le code source complet est disponible sur GitHub.

Public cible de ce tutoriel

Identifiez votre situation ci-dessous pour savoir par où commencer :

Votre situation Point de départ
Vous débutez avec Spring Cloud Suivez toutes les étapes. Vous apprendrez comment Spring Cloud Alibaba Nacos Discovery implémente l'enregistrement et la découverte de services, ainsi que la manière d'activer les appels du consommateur vers le fournisseur.
Vous maîtrisez Eureka, Consul ou ZooKeeper Remplacez vos dépendances et configurations d'annuaire de services existantes par Spring Cloud Alibaba Nacos Discovery. Aucune modification de code n'est nécessaire, car Spring Cloud Alibaba implémente les interfaces standard Spring Cloud Registry.
Vous utilisez déjà Spring Cloud Alibaba Nacos Discovery open source Passez directement à l'étape Étape 4 : Déploiement sur SAE.
Si vous souhaitez ignorer entièrement la configuration locale de Nacos, rendez-vous directement à l'étape Étape 4 : Déploiement sur SAE et utilisez l'annuaire intégré à SAE. Aucun serveur Nacos local n'est requis dans ce cas.

Prérequis

Avant de commencer, assurez-vous de disposer des éléments suivants :

  • Maven installé et ajouté à votre PATH

  • Un serveur Nacos en cours d'exécution (requis pour les étapes 1 à 3 ; non requis si vous passez directement à l'étape 4)

Pour démarrer un serveur Nacos local :

  1. Téléchargez et extrayez le package du serveur Nacos.

  2. Démarrez Nacos en mode autonome :

    • Linux, Unix ou macOS : sudo sh startup.sh -m standalone

    • Windows : startup.cmd -m standalone

L'indicateur -m standalone démarre Nacos en mode autonome plutôt qu'en mode cluster. Sous Windows, un double-clic sur startup.cmd lance par défaut le mode cluster, ce qui échoue en l'absence de configuration de cluster. En cas d'erreur au démarrage, ouvrez startup.cmd dans un éditeur de texte, définissez MODE="standalone" , puis exécutez à nouveau le fichier. Pour plus de détails, consultez la section Démarrage rapide de Nacos .

Choisir un annuaire de services

SAE prend en charge trois options d'annuaire de services, classées de la plus recommandée à la moins recommandée :

Option Idéal pour Remarques
Microservices Engine (MSE) (recommandé) Charges de travail de production avec de nombreux microservices Solution Nacos commerciale entièrement gérée ; consultez la section Utiliser un annuaire MSE Nacos
Annuaire autogéré Équipes nécessitant un contrôle total Requiert une connectivité réseau entre SAE et votre cluster Nacos ; consultez les remarques sur les annuaires autogérés ci-dessous
Annuaire intégré à SAE Prise en main ou charges de travail simples Configuration zéro ; SAE injecte automatiquement l'adresse du serveur Nacos, le port, le namespace, l'AccessKey et le Context-path lors du déploiement

ZF182Dl2pw

Annuaire intégré à SAE

SAE fournit un adressage automatique du serveur Nacos pour les applications de microservices Java. Configurez cette fonctionnalité via la fonction service registration and discovery dans la console SAE. Pour les instructions de configuration, consultez la section Utiliser l'annuaire Nacos intégré à SAE.

x6JeUmPTQf

Remarques sur les annuaires autogérés

7D79jXUfBL

Lorsque vous utilisez un annuaire Nacos autogéré avec SAE, déployez votre application sous forme d'image ou de package JAR et ajoutez les paramètres de démarrage suivants avant -jar :

-Dnacos.use.endpoint.parsing.rule=false -Dnacos.use.cloud.namespace.parsing=false
Important

Ne mélangez pas les paramètres JVM -D et -XX dans le même argument, sous peine d'échec de la commande. Incorrect : Correct :

java -Dalicloud.deployment.mode=EDAS_MANAGED -XX:+UseContainerSupport -XX:InitialRAMPercentage=70.0 ... -jar /home/admin/app/xx-server.jar
java -XX:+UseContainerSupport -XX:InitialRAMPercentage=70.0 ... -Dnacos.use.endpoint.parsing.rule=false -Dnacos.use.cloud.namespace.parsing=false -jar /home/admin/app/xx-server.jar

Pour les déploiements par image : Ajoutez les paramètres à la commande de démarrage de l'image :

RUN echo 'eval exec java -Dnacos.use.endpoint.parsing.rule=false -Dnacos.use.cloud.namespace.parsing=false -jar $CATALINA_OPTS /home/admin/app/hello-edas-0.0.1-SNAPSHOT.jar'> /home/admin/start.sh && chmod +x /home/admin/start.sh

Pour obtenir des conseils sur la création d'une image Docker, consultez la section Exemple de création d'image.

Pour les déploiements par package JAR : Dans la console SAE, accédez à Startup Command Settings et saisissez les paramètres dans le champ options Settings.

sc_configure_a_startup_command_for_nacos

Pour plus de détails, consultez la section Configurer une commande de démarrage.

Étape 1 : Créer le fournisseur de service

Le fournisseur de service s'enregistre auprès de Nacos et expose un endpoint echo. Cet exemple utilise Spring Boot 2.1.4.RELEASE et Spring Cloud Greenwich.SR1.

Spring Boot 2.4 et versions ultérieures ne sont pas pris en charge. Si vous utilisez Spring Cloud Alibaba 2.2.6.RELEASE, la version cliente requise est la 1.4.2.
  1. Créez un projet Maven nommé nacos-service-provider.

  2. Ajoutez les éléments suivants au fichier pom.xml :

    Spring Cloud Edgware a atteint sa fin de vie. Utilisez Greenwich ou une version ultérieure pour les nouveaux projets.
    Version Spring Cloud Version Spring Cloud Alibaba
    Greenwich (utilisée dans cet exemple) 2.1.1.RELEASE
    Finchley 2.0.1.RELEASE
    Edgware (fin de vie) 1.5.1.RELEASE
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.4.RELEASE</version>
        <relativePath/>
    </parent>
    
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.1.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </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>

    Compatibilité des versions : Faites correspondre votre version Spring Cloud à la version Spring Cloud Alibaba appropriée :

  3. Dans le répertoire src/main/java, créez le package com.aliware.edas.

  4. Dans le package com.aliware.edas, créez la classe de démarrage ProviderApplication. L'annotation @EnableDiscoveryClient active l'enregistrement et la découverte de services :

    package com.aliware.edas;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    
    @SpringBootApplication
    @EnableDiscoveryClient
    public class ProviderApplication {
        public static void main(String[] args) {
            SpringApplication.run(ProviderApplication.class, args);
        }
    }
  5. Dans le package com.aliware.edas, créez la classe EchoController. Elle mappe les requêtes GET vers /echo/{string} et renvoie la variable de chemin :

    package com.aliware.edas;
    
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class EchoController {
        @RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)
        public String echo(@PathVariable String string) {
            return string;
        }
    }
  6. Dans le répertoire src/main/resources, créez le fichier application.properties et pointez-le vers le serveur Nacos local :

    spring.application.name=service-provider
    server.port=18081
    spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

    Si votre serveur Nacos s'exécute sur un hôte différent, remplacez 127.0.0.1 par son adresse IP. Pour toutes les options de configuration disponibles, consultez la section Référence de configuration.

  7. Vérifiez l'enregistrement :

    1. Exécutez la méthode main de la classe ProviderApplication.

    2. Ouvrez http://127.0.0.1:8848/nacos dans un navigateur. Le nom d'utilisateur et le mot de passe par défaut sont tous deux nacos.

    3. Dans le volet de navigation de gauche, choisissez Service Management > Service List. service-provider devrait apparaître dans la liste. Cliquez sur Details pour confirmer.

Étape 2 : Créer le consommateur de service

Le consommateur de service s'enregistre auprès de Nacos et appelle le fournisseur à l'aide de deux mécanismes : RestTemplate (avec équilibrage de charge côté client) et FeignClient (HTTP déclaratif).

  1. Créez un projet Maven nommé nacos-service-consumer.

  2. Ajoutez les éléments suivants au fichier pom.xml. Le consommateur ajoute spring-cloud-starter-openfeign aux dépendances du fournisseur :

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.4.RELEASE</version>
        <relativePath/>
    </parent>
    
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.1.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </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>
  3. Dans le répertoire src/main/java, créez le package com.aliware.edas.

  4. Dans le package com.aliware.edas, créez l'interface EchoService. L'annotation @FeignClient la lie au service service-provider enregistré dans Nacos :

    package com.aliware.edas;
    
    import org.springframework.cloud.openfeign.FeignClient;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    
    @FeignClient(name = "service-provider")
    public interface EchoService {
        @RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
        String echo(@PathVariable("str") String str);
    }
  5. Dans le package com.aliware.edas, créez la classe de démarrage ConsumerApplication :

    • @EnableDiscoveryClient — enregistre le consommateur auprès de Nacos

    • @EnableFeignClients — active l'analyse FeignClient

    • @LoadBalanced sur le bean RestTemplate — active l'équilibrage de charge côté client via Nacos

    package com.aliware.edas;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    import org.springframework.cloud.client.loadbalancer.LoadBalanced;
    import org.springframework.cloud.openfeign.EnableFeignClients;
    import org.springframework.context.annotation.Bean;
    import org.springframework.web.client.RestTemplate;
    
    @SpringBootApplication
    @EnableDiscoveryClient
    @EnableFeignClients
    public class ConsumerApplication {
    
        @LoadBalanced
        @Bean
        public RestTemplate restTemplate() {
            return new RestTemplate();
        }
    
        public static void main(String[] args) {
            SpringApplication.run(ConsumerApplication.class, args);
        }
    }
  6. Dans le package com.aliware.edas, créez la classe TestController pour exposer deux endpoints — un pour chaque méthode d'appel :

    package com.aliware.edas;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.client.RestTemplate;
    
    @RestController
    public class TestController {
    
        @Autowired
        private RestTemplate restTemplate;
        @Autowired
        private EchoService echoService;
    
        // Calls the provider via RestTemplate with load balancing
        @RequestMapping(value = "/echo-rest/{str}", method = RequestMethod.GET)
        public String rest(@PathVariable String str) {
            return restTemplate.getForObject("http://service-provider/echo/" + str, String.class);
        }
    
        // Calls the provider via FeignClient
        @RequestMapping(value = "/echo-feign/{str}", method = RequestMethod.GET)
        public String feign(@PathVariable String str) {
            return echoService.echo(str);
        }
    }
  7. Dans le répertoire src/main/resources, créez le fichier application.properties :

    spring.application.name=service-consumer
    server.port=18082
    spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
  8. Vérifiez l'enregistrement :

    1. Exécutez la méthode main de la classe ConsumerApplication.

    2. Ouvrez http://127.0.0.1:8848/nacos (nom d'utilisateur et mot de passe : nacos).

    3. Choisissez Service Management > Service List. Confirmez que service-consumer apparaît dans la liste.

Étape 3 : Tester localement

Une fois les deux services en cours d'exécution, envoyez des requêtes de test du consommateur vers le fournisseur.

Linux, Unix ou macOS :

curl http://127.0.0.1:18082/echo-rest/rest-rest
curl http://127.0.0.1:18082/echo-feign/feign-rest

Windows : Saisissez les URL suivantes dans un navigateur :

http://127.0.0.1:18082/echo-rest/rest-rest
http://127.0.0.1:18082/echo-feign/feign-rest

Les deux endpoints renvoient le paramètre de chemin dans le corps de la réponse, confirmant que le consommateur a découvert et appelé le fournisseur avec succès.

Étape 4 : Déploiement sur SAE

Déployez nacos-service-provider et nacos-service-consumer en tant que deux applications distinctes. Elles doivent se trouver dans la même région et le même namespace pour que la découverte de services fonctionne.

Pour des instructions de déploiement détaillées, consultez la section Déployer une application Java.

Définissez l'Application runtime environment en fonction de votre type de package :

Type de package Environnement d'exécution de l'application
Package JAR Standard Java Application Runtime Environment
Package WAR apache-tomcat-XXX

Lorsque l'application démarre sur SAE, l'annuaire de services intégré injecte automatiquement l'adresse du serveur Nacos, le port de service, le namespace, l'AccessKey et le Context-path. Ces valeurs ont priorité sur tous les paramètres définis dans application.properties. Votre configuration d'origine peut rester en place ou être supprimée ; les deux options fonctionnent.

Étape 5 : Vérifier le déploiement

  1. Associez un Classic Load Balancer (CLB) public à l'application nacos-service-consumer. Lors de la configuration de l'accès public, définissez le Network Protocol sur HTTP, le HTTP Port sur 80 et le Container Port sur 18082. Pour plus de détails, consultez la section Associer un CLB à une application.

  2. Dans un navigateur, saisissez l'adresse IP publique du CLB selon l'un des formats suivants :

    http://<public-IP-address>/echo-rest/rest-rest
    http://<public-IP-address>/echo-feign/feign-rest

    La réception d'une réponse sur la page confirme que le déploiement fonctionne correctement.

Référence de configuration

Propriétés de configuration Spring Cloud Alibaba Nacos Discovery pour le fichier application.properties :

Clé Valeur par défaut Description
spring.cloud.nacos.discovery.server-addr Aucune Adresse IP et port du serveur Nacos
spring.cloud.nacos.discovery.service ${spring.application.name} Nom sous lequel le service s'enregistre
spring.cloud.nacos.discovery.network-interface Aucune Interface réseau à utiliser pour l'enregistrement ; revient à la première interface disponible si non définie
spring.cloud.nacos.discovery.ip Aucune Adresse IP explicite à enregistrer (prioritaire sur la détection d'interface)
spring.cloud.nacos.discovery.port -1 Port à enregistrer ; détecté automatiquement si non spécifié
spring.cloud.nacos.discovery.namespace Aucune Namespace pour l'isolation des environnements (par exemple, séparation du développement et de la production)
spring.cloud.nacos.discovery.metadata Aucune Métadonnées personnalisées au format map
spring.cloud.nacos.discovery.cluster-name DEFAULT Nom du cluster Nacos
spring.cloud.nacos.discovery.endpoint Aucune Nom de domaine pour la résolution dynamique de l'adresse du serveur Nacos ; non requis lors du déploiement sur SAE
ribbon.nacos.enabled true Active l'intégration de Ribbon avec Nacos ; ne pas modifier sauf si nécessaire

Pour la liste complète des options de configuration, consultez la section Nacos Discovery.

Étapes suivantes