Este tutorial muestra cómo construir un proveedor y un consumidor de servicios Dubbo mediante anotaciones de Spring Boot y Nacos como registro de servicios. Posteriormente, se explica cómo desplegar la aplicación en Enterprise Distributed Application Service (EDAS). Usted puede elegir el registro y gestionar las configuraciones según los requisitos de su negocio.
Si ya cuenta con una aplicación Dubbo basada en Spring Boot, omita este tema y despliegue la aplicación directamente en EDAS.
Inicio rápido con el proyecto de demostración
Clone la demostración precompilada para omitir la configuración manual:
git clone https://github.com/aliyun/alibabacloud-microservice-demo.git
cd alibabacloud-microservice-demo/microservice-doc-demo/dubbo-samples-spring-boot
Como alternativa, descargue el archivo ZIP. La demostración de este tutorial se encuentra en alibabacloud-microservice-demo/microservice-doc-demo/dubbo-samples-spring-boot.
Para generar un nuevo proyecto de Spring Boot con las dependencias obligatorias preconfiguradas, utilice Cloud Native App Initializer.
Requisitos previos
Antes de empezar, compruebe que cuenta con lo siguiente:
Maven instalado y con las variables de entorno configuradas.
-
La versión más reciente de Nacos Server descargada e iniciada en modo independiente:
Extraiga el paquete de Nacos Server que descargó.
Vaya al directorio
nacos/bin.-
Inicie el servidor:
Linux, UNIX o macOS: ejecute
sh startup.sh -m standalone.Windows: en
startup.cmd, establezcaset MODE="standalone"y luego ejecute el archivo.
(Opcional) Interconexión configurada entre las aplicaciones locales y las de la nube.
-
Opcional:
Usted puede usar Cloud-native App Scaffolding para crear un proyecto de Spring Boot. Para obtener más información, consulte Detalles.
Cuando desarrolla aplicaciones de forma local, puede utilizar el plugin Alibaba Cloud Toolkit para habilitar llamadas mutuas entre las aplicaciones locales y las aplicaciones desplegadas en EDAS. A esto se le conoce como interconexión de extremo a nube. De esta manera, no necesita configurar una VPN y mejora la eficiencia del desarrollo. Para obtener más información, consulte Overview of end-to-cloud interconnection.
Crear un proveedor de servicios
Paso 1: Configurar el proyecto de Maven
Cree un proyecto de Maven llamado spring-boot-dubbo-provider y agregue a continuación las dependencias en pom.xml. Este ejemplo utiliza 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>
Paso 2: Definir la interfaz del servicio
En src/main/java, cree el paquete com.alibaba.edas.boot y agregue la interfaz IHelloService:
package com.alibaba.edas.boot;
public interface IHelloService {
String sayHello(String str);
}
Paso 3: Implementar el servicio
En el mismo paquete, cree IHelloServiceImpl para implementar la interfaz:
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)";
}
}
La anotación @Service que se usa aquí es com.alibaba.dubbo.config.annotation.Service de Apache Dubbo, y no la anotación @Service de Spring Framework.
Paso 4: Configurar la aplicación
Cree application.properties (o application.yaml) en 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
A continuación se describe cada propiedad en la tabla.
|
Propiedad |
Descripción |
|
|
Paquetes donde se buscan |
|
|
Nombre de la aplicación registrado en Nacos. Obligatorio; sin valor predeterminado. |
|
|
Debe comenzar con |
Paso 5: Crear la clase de entrada de la aplicación
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);
}
}
Paso 6: Comprobar el proveedor
Abra la consola de Nacos en http://127.0.0.1:8848 y haga clic en Services en el panel de navegación izquierdo. Confirme que com.alibaba.edas.boot.IHelloService aparece en la lista de servicios con el grupo de servicios y la dirección IP del proveedor correctos.
Crear un consumidor de servicios
Paso 1: Configurar el proyecto de Maven
Cree un proyecto de Maven llamado spring-boot-dubbo-consumer y agregue a continuación las dependencias en pom.xml. Este ejemplo utiliza 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 llegó al final de su ciclo de vida en agosto de 2019. Si necesita usar Spring Boot 1.x, utilice la versión 1.5.x junto con com.alibaba.boot:dubbo-spring-boot-starter versión 0.1.0. Se recomienda actualizar a una versión más reciente.
Paso 2: Definir la interfaz del servicio
En src/main/java, cree el paquete com.alibaba.edas.boot y agregue la misma interfaz IHelloService que utilizó en el proveedor:
package com.alibaba.edas.boot;
public interface IHelloService {
String sayHello(String str);
}
Paso 3: Implementar la llamada al servicio
Cree un controlador REST que llame al servicio Dubbo remoto:
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);
}
}
La anotación @Reference corresponde a com.alibaba.dubbo.config.annotation.Reference de Apache Dubbo.
Paso 4: Configurar la aplicación
Agregue a continuación las propiedades en application.properties o application.yaml:
dubbo.application.name=dubbo-consumer-demo
dubbo.registry.address=nacos://127.0.0.1:8848
|
Propiedad |
Descripción |
|
|
Nombre de la aplicación registrado en Nacos. Obligatorio; sin valor predeterminado. |
|
|
Debe comenzar con |
Paso 5: Crear la clase de entrada de la aplicación
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);
}
}
Paso 6: Comprobar el consumidor
Abra la consola de Nacos en http://127.0.0.1:8848 y haga clic en Services en el panel de navegación izquierdo. Confirme que com.alibaba.edas.boot.IHelloService aparece en la lista de servicios con el grupo de servicios y la dirección IP del llamante correctos.
Probar la configuración local
Una vez que el proveedor y el consumidor estén en ejecución, envíe una solicitud de prueba:
curl http://localhost:8080/sayHello/EDAS
Respuesta esperada:
Hello, EDAS (from Dubbo with Spring Boot)
Desplegar en EDAS
Application Configuration Management (ACM), integrado en EDAS, proporciona una versión comercial de Nacos. Cuando usted despliega en EDAS, este reemplaza automáticamente la dirección local de Nacos Server (127.0.0.1:8848) por la dirección del registro gestionado.
EDAS admite el despliegue en los siguientes tipos de clúster. Elija el tipo de clúster y el método de despliegue según sus necesidades.
|
Tipo de clúster |
Documentación |
|
Elastic Compute Service (ECS) |
|
|
Container Service for Kubernetes (ACK) |
Empaquetar la aplicación para el despliegue desde la consola
Para desplegar mediante la consola de EDAS, agregue el plugin de Maven de Spring Boot en pom.xml y compile el paquete JAR antes de cargarlo.
**Archivo pom.xml del proveedor:**
<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>
**Archivo pom.xml del consumidor:**
<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>
Compile el paquete JAR:
mvn clean package
Nota sobre la migración
Evite usar edas-dubbo-extension para desplegar aplicaciones Dubbo en EDAS. Esta extensión no es compatible con funciones de EDAS como la gobernanza de servicios Dubbo. En su lugar, migre a Nacos.