Utilice las anotaciones de Spring Boot para crear desde cero un proveedor y un consumidor de servicios Dubbo, regístrelos en Nacos y despliéguelos en SAE. Este enfoque elimina la necesidad de configuraciones XML extensas y es un buen punto de partida si usted es nuevo en Maven o en el framework Dubbo.
Requisitos previos
Antes de empezar, asegúrese de que cuenta con lo siguiente:
Maven instalado y sus variables de entorno configuradas
-
La versión más reciente de Nacos Server descargada y ejecutándose en modo independiente:
Descomprima el paquete de Nacos Server.
Vaya al directorio
nacos/bin.-
Inicie Nacos Server:
Linux, UNIX o macOS: Ejecute
sh startup.sh -m standaloneWindows: Establezca
set MODE="standalone"enstartup.cmdy luego ejecute el archivo
Proyecto de demostración
Siga los pasos de este tema para crear el proyecto desde cero, o descargue directamente el proyecto de demostración. También puede clonar el repositorio:
git clone https://github.com/aliyun/alibabacloud-microservice-demo.git
La demostración de este tema se encuentra en alibabacloud-microservice-demo/microservice-doc-demo/dubbo-samples-spring-boot.
Creación de un proveedor de servicios
Paso 1: Configuración del proyecto
Cree un proyecto Maven llamado spring-boot-dubbo-provider y agregue las siguientes dependencias a 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: Definición de la interfaz del servicio
Todos los servicios Dubbo se exponen mediante interfaces.
En
src/main/java, cree un paquete llamadocom.alibaba.edas.boot.En ese paquete, cree una interfaz llamada
IHelloService:
package com.alibaba.edas.boot;
public interface IHelloService {
String sayHello(String str);
}
Paso 3: Implementación del servicio
En el paquete com.alibaba.edas.boot, cree una clase llamada IHelloServiceImpl para implementar 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)";
}
}
La anotación@Serviceutilizada aquí escom.alibaba.dubbo.config.annotation.Serviceproporcionada por Dubbo, no la anotación@Servicede Spring.
Paso 4: Configuración del servicio Dubbo
En src/main/resources, cree application.properties (o application.yaml) y agregue lo siguiente:
# 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
Los tres elementos de configuración son obligatorios; ninguno tiene valores predeterminados.
dubbo.scan.basePackages: los paquetes que contienen las anotaciones@Servicey@Reference. Separe varios paquetes con comas.
dubbo.registry.address: debe comenzar connacos://, seguido de la dirección IP y el puerto de Nacos Server. Si utiliza el registro administrado por SAE, este reemplaza automáticamente dicha dirección en tiempo de ejecución. Si usa una instancia de Nacos autoadministrada, sustituya127.0.0.1:8848por su dirección IP y puerto correspondientes.
Paso 5: Inicio del proveedor
Cree la clase principal de Spring Boot DubboProvider y ejecútela:
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);
}
}
Verificación del proveedor
Inicie sesión en la consola de Nacos en http://127.0.0.1:8848. En el panel de navegación izquierdo, haga clic en Services. Compruebe que com.alibaba.edas.boot.IHelloService aparece en la lista de servicios, junto con su grupo de servicios y la dirección IP del proveedor.
Creación de un consumidor de servicios
Paso 1: Configuración del proyecto
Cree un proyecto Maven llamado spring-boot-dubbo-consumer y agregue las siguientes dependencias a pom.xml. Este ejemplo también 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>
Si necesita usar Spring Boot 1.x, utilice Spring Boot 1.5.x con com.alibaba.boot:dubbo-spring-boot-starter:0.1.0 . Tenga en cuenta que el ciclo de vida de Spring Boot 1.x finalizó en agosto de 2019, por lo que se recomienda encarecidamente usar una versión más reciente.
Paso 2: Referencia a la interfaz del servicio
En src/main/java, cree el paquete com.alibaba.edas.boot y agregue la misma interfaz IHelloService que en el proveedor:
package com.alibaba.edas.boot;
public interface IHelloService {
String sayHello(String str);
}
Paso 3: Llamada al servicio remoto
Cree un controlador que use la anotación @Reference para inyectar el servicio remoto IHelloService y exponerlo mediante 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);
}
}
La anotación@Referenceutilizada aquí escom.alibaba.dubbo.config.annotation.Referenceproporcionada por Dubbo.
Paso 4: Configuración del consumidor
En src/main/resources, agregue lo siguiente a application.properties (o application.yaml):
dubbo.application.name=dubbo-consumer-demo
dubbo.registry.address=nacos://127.0.0.1:8848
Ambos elementos de configuración son obligatorios. Si Nacos Server se ejecuta en un host diferente, reemplace 127.0.0.1:8848 por la dirección IP y el puerto reales.
Paso 5: Inicio del consumidor
Cree la clase principal de Spring Boot DubboConsumer y ejecútela:
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);
}
}
Verificación del consumidor
Inicie sesión en la consola de Nacos en http://127.0.0.1:8848. En el panel de navegación izquierdo, haga clic en Services. Compruebe que com.alibaba.edas.boot.IHelloService aparece en la lista de servicios, junto con su grupo de servicios y la dirección IP del llamante.
Verificación de la invocación del servicio
Una vez que tanto el proveedor como el consumidor estén en ejecución, envíe una solicitud de prueba:
curl http://localhost:8080/sayHello/SAE
Salida esperada:
Hello, SAE (from Dubbo with Spring Boot)
Despliegue en SAE
SAE reemplaza automáticamente el registro local de Nacos por el registro de servicios de SAE en tiempo de ejecución, por lo que no se requieren cambios en el código.
Antes de desplegar mediante la consola, compile cada aplicación en un paquete JAR o WAR ejecutable:
-
Agregue el plugin de empaquetado de Maven a
pom.xml. 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>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> Ejecute
mvn clean packagepara compilar el archivo JAR.Despliegue el paquete en SAE. Para conocer las opciones de despliegue, consulte Application deployment.
Pasos siguientes
Host Dubbo applications in SAE — aprenda a desarrollar servicios Dubbo mediante archivos de configuración XML en lugar de anotaciones
Application deployment — explore todos los métodos de despliegue compatibles con SAE