Utilisez les annotations Spring Boot pour créer de zéro un fournisseur et un consommateur de services Dubbo, les enregistrer auprès de Nacos, puis les déployer sur SAE. Cette approche élimine le besoin d'une configuration XML verbeuse et constitue un excellent point de départ si vous débutez avec Maven ou le framework Dubbo.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Maven installé et ses variables d'environnement configurées
-
La dernière version de Nacos Server téléchargée et exécutée en mode autonome :
Décompressez l'archive Nacos Server.
Accédez au répertoire
nacos/bin.-
Démarrez Nacos Server :
Linux, UNIX ou macOS : exécutez
sh startup.sh -m standaloneWindows : définissez
set MODE="standalone"dansstartup.cmd, puis exécutez le fichier
Projet de démonstration
Suivez les étapes de cette rubrique pour construire le projet de zéro, ou téléchargez directement le projet de démonstration. Vous pouvez également cloner le dépôt :
git clone https://github.com/aliyun/alibabacloud-microservice-demo.git
La démonstration associée à cette rubrique se trouve dans alibabacloud-microservice-demo/microservice-doc-demo/dubbo-samples-spring-boot.
Créer un fournisseur de services
Étape 1 : Configurer le projet
Créez un projet Maven nommé spring-boot-dubbo-provider et ajoutez les dépendances suivantes au fichier pom.xml. Cet exemple utilise Spring Boot 2.0.6.RELEASE.
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.0.6.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>1.1.1</version>
</dependency>
</dependencies>
Étape 2 : Définir l'interface de service
Tous les services Dubbo sont exposés via des interfaces.
Dans
src/main/java, créez un package nommécom.alibaba.edas.boot.Dans ce package, créez une interface nommée
IHelloService:
package com.alibaba.edas.boot;
public interface IHelloService {
String sayHello(String str);
}
Étape 3 : Implémenter le service
Dans le package com.alibaba.edas.boot, créez une classe nommée IHelloServiceImpl pour implémenter IHelloService :
package com.alibaba.edas.boot;
import com.alibaba.dubbo.config.annotation.Service;
@Service
public class IHelloServiceImpl implements IHelloService {
public String sayHello(String name) {
return "Hello, " + name + " (from Dubbo with Spring Boot)";
}
}
L'annotation@Serviceutilisée ici estcom.alibaba.dubbo.config.annotation.Servicefournie par Dubbo, et non l'annotation Spring@Service.
Étape 4 : Configurer le service Dubbo
Dans src/main/resources, créez le fichier application.properties (ou application.yaml) et ajoutez les éléments suivants :
# Packages to scan for Dubbo annotations (@Service, @Reference)
dubbo.scan.basePackages=com.alibaba.edas.boot
dubbo.application.name=dubbo-provider-demo
dubbo.registry.address=nacos://127.0.0.1:8848
Les trois éléments de configuration sont obligatoires ; aucun ne possède de valeur par défaut.
dubbo.scan.basePackages: spécifie le ou les packages contenant les annotations@Serviceet@Reference. Séparez plusieurs packages par des virgules.
dubbo.registry.address: doit commencer parnacos://, suivi de l'adresse IP et du port du serveur Nacos. Si vous utilisez le registre géré par SAE, SAE remplace automatiquement cette adresse lors de l'exécution. Si vous utilisez une instance Nacos auto-gérée, remplacez127.0.0.1:8848par son adresse IP et son port.
Étape 5 : Démarrer le fournisseur
Créez la classe principale Spring Boot DubboProvider et exécutez-la :
package com.alibaba.edas.boot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DubboProvider {
public static void main(String[] args) {
SpringApplication.run(DubboProvider.class, args);
}
}
Vérifier le fournisseur
Connectez-vous à la console Nacos à l'adresse http://127.0.0.1:8848. Dans le volet de navigation de gauche, cliquez sur Services. Confirmez que com.alibaba.edas.boot.IHelloService apparaît dans la liste des services, ainsi que son groupe de services et l'adresse IP du fournisseur.
Créer un consommateur de services
Étape 1 : Configurer le projet
Créez un projet Maven nommé spring-boot-dubbo-consumer et ajoutez les dépendances suivantes au fichier pom.xml. Cet exemple utilise également Spring Boot 2.0.6.RELEASE.
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.0.6.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>1.1.1</version>
</dependency>
</dependencies>
Si vous devez utiliser Spring Boot 1.x, utilisez Spring Boot 1.5.x avec com.alibaba.boot:dubbo-spring-boot-starter:0.1.0 . Notez que le cycle de vie de Spring Boot 1.x s'est terminé en août 2019 ; il est fortement recommandé d'utiliser une version plus récente.
Étape 2 : Référencer l'interface de service
Dans src/main/java, créez le package com.alibaba.edas.boot et ajoutez la même interface IHelloService que celle du fournisseur :
package com.alibaba.edas.boot;
public interface IHelloService {
String sayHello(String str);
}
Étape 3 : Appeler le service distant
Créez un contrôleur qui utilise l'annotation @Reference pour injecter le IHelloService distant et l'exposer via HTTP :
package com.alibaba.edas.boot;
import com.alibaba.dubbo.config.annotation.Reference;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class DemoConsumerController {
@Reference
private IHelloService demoService;
@RequestMapping("/sayHello/{name}")
public String sayHello(@PathVariable String name) {
return demoService.sayHello(name);
}
}
L'annotation@Referenceutilisée ici estcom.alibaba.dubbo.config.annotation.Referencefournie par Dubbo.
Étape 4 : Configurer le consommateur
Dans src/main/resources, ajoutez les éléments suivants au fichier application.properties (ou application.yaml) :
dubbo.application.name=dubbo-consumer-demo
dubbo.registry.address=nacos://127.0.0.1:8848
Les deux éléments de configuration sont obligatoires. Si le serveur Nacos s'exécute sur un hôte différent, remplacez 127.0.0.1:8848 par l'adresse IP et le port réels.
Étape 5 : Démarrer le consommateur
Créez la classe principale Spring Boot DubboConsumer et exécutez-la :
package com.alibaba.edas.boot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DubboConsumer {
public static void main(String[] args) {
SpringApplication.run(DubboConsumer.class, args);
}
}
Vérifier le consommateur
Connectez-vous à la console Nacos à l'adresse http://127.0.0.1:8848. Dans le volet de navigation de gauche, cliquez sur Services. Confirmez que com.alibaba.edas.boot.IHelloService apparaît dans la liste des services, ainsi que son groupe de services et l'adresse IP de l'appelant.
Vérifier l'invocation du service
Une fois le fournisseur et le consommateur en cours d'exécution, envoyez une requête de test :
curl http://localhost:8080/sayHello/SAE
Résultat attendu :
Hello, SAE (from Dubbo with Spring Boot)
Déployer sur SAE
SAE remplace automatiquement le registre Nacos local par le registre de services SAE lors de l'exécution, ce qui évite toute modification du code.
Avant de déployer via la console, compilez chaque application dans un package JAR ou WAR exécutable :
-
Ajoutez le plugin de packaging Maven au fichier
pom.xml. Fournisseur :<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> <configuration> <classifier>spring-boot</classifier> <mainClass>com.alibaba.edas.boot.DubboProvider</mainClass> </configuration> </execution> </executions> </plugin> </plugins> </build>Consommateur :
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> <configuration> <classifier>spring-boot</classifier> <mainClass>com.alibaba.edas.boot.DubboConsumer</mainClass> </configuration> </execution> </executions> </plugin> </plugins> </build> Exécutez
mvn clean packagepour générer le fichier JAR.Déployez le package sur SAE. Pour connaître les options de déploiement, consultez la section Déploiement d'applications.
Étapes suivantes
Héberger des applications Dubbo dans SAE : découvrez comment développer des services Dubbo à l'aide de fichiers de configuration XML plutôt que d'annotations
Déploiement d'applications : explorez toutes les méthodes de déploiement prises en charge par SAE