Ce tutoriel explique comment créer un fournisseur et un consommateur de services Dubbo à l'aide d'annotations Spring Boot et de Nacos comme registre de services, puis les déployer sur Enterprise Distributed Application Service (EDAS). Vous pouvez sélectionner un registre et gérer les configurations en fonction de vos besoins métier.
Si vous disposez déjà d'une application Dubbo basée sur Spring Boot, ignorez cette rubrique et déployez l'application directement sur EDAS.
Démarrage rapide avec le projet de démonstration
Clonez la démonstration préconfigurée pour éviter la configuration manuelle :
git clone https://github.com/aliyun/alibabacloud-microservice-demo.git
cd alibabacloud-microservice-demo/microservice-doc-demo/dubbo-samples-spring-boot
Vous pouvez également télécharger l'archive ZIP. La démonstration pour ce tutoriel se trouve dans alibabacloud-microservice-demo/microservice-doc-demo/dubbo-samples-spring-boot.
Pour générer un nouveau projet Spring Boot avec les dépendances requises préconfigurées, utilisez Cloud Native App Initializer.
Prérequis
Avant de commencer, assurez-vous que :
Maven est installé et que les variables d'environnement sont configurées
-
La dernière version de Nacos Server est téléchargée et démarrée en mode autonome :
Extrayez le package Nacos Server téléchargé.
Accédez au répertoire
nacos/bin.-
Démarrez le serveur :
Linux, UNIX ou macOS : Exécutez
sh startup.sh -m standalone.Windows : Dans
startup.cmd, définissezset MODE="standalone", puis exécutez le fichier.
(Facultatif) L'interconnexion entre les applications locales et cloud est configurée
-
Facultatif :
Utilisez Cloud-native App Scaffolding pour créer un projet Spring Boot. Pour plus d'informations, consultez Détails.
Lors du développement local d'applications, utilisez le plug-in Alibaba Cloud Toolkit pour activer les appels mutuels entre les applications locales et les applications 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 Présentation de l'interconnexion end-to-cloud.
Créer un fournisseur de services
Étape 1 : Configurer le projet Maven
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
Dans src/main/java, créez le package com.alibaba.edas.boot et ajoutez l'interface IHelloService :
package com.alibaba.edas.boot;
public interface IHelloService {
String sayHello(String str);
}
Étape 3 : Implémenter le service
Dans le même package, créez IHelloServiceImpl pour implémenter l'interface :
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 @Service utilisée ici est com.alibaba.dubbo.config.annotation.Service d'Apache Dubbo, et non l'annotation @Service du framework Spring.
Étape 4 : Configurer l'application
Créez le fichier application.properties (ou application.yaml) dans src/main/resources :
# Base packages to scan Dubbo components (e.g., @Service, @Reference)
dubbo.scan.basePackages=com.alibaba.edas.boot
dubbo.application.name=dubbo-provider-demo
dubbo.registry.address=nacos://127.0.0.1:8848
Le tableau suivant décrit chaque propriété.
| Propriété | Description |
|---|---|
dubbo.scan.basePackages |
Packages à analyser pour rechercher com.alibaba.dubbo.config.annotation.Service et com.alibaba.dubbo.config.annotation.Reference. Séparez plusieurs packages par des virgules (,). Obligatoire ; aucune valeur par défaut. |
dubbo.application.name |
Nom de l'application enregistré auprès de Nacos. Obligatoire ; aucune valeur par défaut. |
dubbo.registry.address |
Doit commencer par nacos://, suivi de l'adresse IP et du port du serveur Nacos. Pour le développement local, utilisez 127.0.0.1:8848. Lors du déploiement sur EDAS avec un registre géré par EDAS, celui-ci remplace automatiquement cette adresse. Pour un registre Nacos auto-géré, remplacez cette valeur par l'adresse de votre registre. Obligatoire ; aucune valeur par défaut. |
Étape 5 : Créer la classe principale de l'application
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);
}
}
Étape 6 : Vérifier le fournisseur
Ouvrez la console Nacos à l'adresse http://127.0.0.1:8848 et cliquez sur Services dans le volet de navigation de gauche. Confirmez que com.alibaba.edas.boot.IHelloService apparaît dans la liste des services avec le groupe de services et l'adresse IP du fournisseur corrects.
Créer un consommateur de services
Étape 1 : Configurer le projet Maven
Créez un projet Maven nommé spring-boot-dubbo-consumer 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-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>
Spring Boot 1.x a atteint sa fin de vie en août 2019. Si vous devez utiliser Spring Boot 1.x, utilisez la version 1.5.x avec com.alibaba.boot:dubbo-spring-boot-starter version 0.1.0. Nous vous recommandons de mettre à niveau vers une version plus récente.
Étape 2 : Définir 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 utilisée dans le fournisseur :
package com.alibaba.edas.boot;
public interface IHelloService {
String sayHello(String str);
}
Étape 3 : Implémenter l'appel de service
Créez un contrôleur REST qui appelle le service Dubbo distant :
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 @Reference est com.alibaba.dubbo.config.annotation.Reference d'Apache Dubbo.
Étape 4 : Configurer l'application
Ajoutez les propriétés suivantes au fichier application.properties ou application.yaml :
dubbo.application.name=dubbo-consumer-demo
dubbo.registry.address=nacos://127.0.0.1:8848
| Propriété | Description |
|---|---|
dubbo.application.name |
Nom de l'application enregistré auprès de Nacos. Obligatoire ; aucune valeur par défaut. |
dubbo.registry.address |
Doit commencer par nacos://, suivi de l'adresse IP et du port du serveur Nacos. Remplacez 127.0.0.1 par l'adresse de votre serveur Nacos s'il s'exécute sur une machine différente. Obligatoire ; aucune valeur par défaut. |
Étape 5 : Créer la classe principale de l'application
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);
}
}
Étape 6 : Vérifier le consommateur
Ouvrez la console Nacos à l'adresse http://127.0.0.1:8848 et cliquez sur Services dans le volet de navigation de gauche. Confirmez que com.alibaba.edas.boot.IHelloService apparaît dans la liste des services avec le groupe de services et l'adresse IP de l'appelant corrects.
Tester la configuration locale
Une fois le fournisseur et le consommateur en cours d'exécution, envoyez une requête de test :
curl http://localhost:8080/sayHello/EDAS
Réponse attendue :
Hello, EDAS (from Dubbo with Spring Boot)
Déployer sur EDAS
Application Configuration Management (ACM), intégré dans EDAS, fournit une version commerciale de Nacos. Lors du déploiement sur EDAS, le système remplace automatiquement l'adresse du serveur Nacos local (127.0.0.1:8848) par l'adresse du registre géré.
EDAS prend en charge le déploiement sur les types de clusters suivants. Choisissez un type de cluster et une méthode de déploiement en fonction de vos besoins.
| Type de cluster | Documentation |
|---|---|
| Elastic Compute Service (ECS) | Déployer sur un cluster ECS |
| Container Service for Kubernetes (ACK) | Déployer sur un cluster Kubernetes |
Empaqueter l'application pour un déploiement via la console
Pour effectuer un déploiement via la console EDAS, ajoutez le plugin Maven Spring Boot au fichier pom.xml et générez le package JAR avant de le télécharger.
**Fournisseur pom.xml :**
<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 pom.xml :**
<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>
Générez le package JAR :
mvn clean package
Note sur la migration
Évitez d'utiliser edas-dubbo-extension pour déployer des applications Dubbo sur EDAS. Cette extension ne prend pas en charge les fonctionnalités EDAS telles que la gouvernance des services Dubbo. Migrez plutôt vers Nacos.