Este tema le guía paso a paso para compilar localmente una aplicación de microservices Dubbo de ejemplo con configuración XML y desplegarla en Serverless App Engine (SAE). La aplicación consta de un proveedor de servicios y un consumidor de servicios, ambos con Nacos como registro de servicios. Tras el despliegue, SAE reemplaza automáticamente la dirección del registro local de Nacos, por lo que no es necesario modificar la configuración.
Requisitos previos
Antes de empezar, asegúrese de contar con lo siguiente:
Maven instalado y configurado en sus variables de entorno
Un servidor Nacos local ejecutándose en modo independiente (consulte los pasos a continuación)
Configurar Nacos Server
Descargue y descomprima el paquete de Nacos Server.
-
Vaya al directorio
nacos/bine inicie Nacos Server:Linux, Unix o macOS: ``
bash sudo sh startup.sh -m standalone``Windows: ``
bash startup.cmd -m standalone``
standaloneinicia Nacos en modo independiente en lugar de modo clúster. Si al hacer doble clic enstartup.cmden Windows se produce un error, abra el archivo y establezcaMODE="standalone"manualmente. Para más detalles, consulte Inicio rápido de Nacos .
Nota sobre versiones: Dubbo 2.7.x y Dubbo 3.0.x llegaron al final de su ciclo de vida en marzo de 2023. Este tema utiliza Dubbo 3.2.15.
Paso 1: Crear un proveedor
Cree un proyecto Maven localmente, defina la interfaz del servicio, configure el registro del servicio basado en XML e inicie el proveedor.
1.1 Crear un proyecto Maven y agregar dependencias
Utilice un IDE (como IntelliJ IDEA o Eclipse) para crear un proyecto Maven.
-
Agregue las siguientes dependencias a
pom.xml:<dependencies> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo</artifactId> <version>3.2.15</version> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-registry-nacos</artifactId> <version>3.2.15</version> </dependency> <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> <version>1.1.1</version> </dependency> </dependencies>
1.2 Definir la interfaz del servicio
Todos los servicios Dubbo se definen mediante interfaces.
En
src/main/java, cree el paquetecom.alibaba.edas.-
En
com.alibaba.edas, cree la interfazIHelloService:package com.alibaba.edas; public interface IHelloService { String sayHello(String str); } -
En
com.alibaba.edas, cree la clase de implementaciónIHelloServiceImpl:package com.alibaba.edas; public class IHelloServiceImpl implements IHelloService { public String sayHello(String str) { return "hello " + str; } }
1.3 Configurar el servicio Dubbo
En
src/main/resources, creeprovider.xml.-
Agregue los espacios de nombres XML de Spring y Dubbo:
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://dubbo.apache.org/schema/dubbo" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd"> -
Exponga la interfaz del servicio y apunte al servidor Nacos local:
Elemento
Valor
Nota
Dirección del registro
nacos://127.0.0.1:8848Apunta a su servidor Nacos local. Después de desplegar en SAE, esta dirección se reemplaza automáticamente por el registro gestionado por SAE; no es necesario cambiar el código.
Puerto de Nacos
8848Fijo; no lo modifique.
<dubbo:application name="demo-provider"/> <dubbo:protocol name="dubbo" port="28082"/> <dubbo:service interface="com.alibaba.edas.IHelloService" ref="helloService"/> <bean id="helloService" class="com.alibaba.edas.IHelloServiceImpl"/> <dubbo:registry address="nacos://127.0.0.1:8848" />Configuración clave:
1.4 Iniciar el proveedor
-
En
com.alibaba.edas, cree la claseProvider:package com.alibaba.edas; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Provider { public static void main(String[] args) throws Exception { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"provider.xml"}); context.start(); System.in.read(); } } Ejecute el método principal de
Providerpara iniciar el servicio.
Verificar el 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 Service List.
El servicio com.alibaba.edas.IHelloService aparece en la lista, junto con su Service Group y su Provider IP.
Paso 2: Crear un consumidor
Cree un proyecto Maven independiente para el consumidor, suscríbase al servicio del proveedor y verifique que la llamada funcione localmente.
2.1 Crear un proyecto Maven y agregar dependencias
Siga los mismos pasos que en Paso 1.1 para crear un proyecto Maven y agregar las mismas tres dependencias a pom.xml.
2.2 Definir la interfaz del servicio
En
src/main/java, cree el paquetecom.alibaba.edas.-
En
com.alibaba.edas, cree la misma interfazIHelloService:package com.alibaba.edas; public interface IHelloService { String sayHello(String str); }
En producción, defina la interfaz en un módulo compartido y refiriéncela tanto desde el proveedor como desde el consumidor mediante dependencias de Maven. La duplicación de la interfaz en este ejemplo es solo con fines demostrativos.
2.3 Configurar el servicio Dubbo
En
src/main/resources, creeconsumer.xml.-
Agregue los espacios de nombres XML de Spring y Dubbo (igual que en
provider.xml):<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://dubbo.apache.org/schema/dubbo" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd"> -
Suscríbase al servicio del proveedor:
<dubbo:application name="demo-consumer"/> <dubbo:registry address="nacos://127.0.0.1:8848"/> <dubbo:reference id="helloService" interface="com.alibaba.edas.IHelloService"/>
2.4 Iniciar el consumidor
-
En
com.alibaba.edas, cree la claseConsumer:package com.alibaba.edas; import org.springframework.context.support.ClassPathXmlApplicationContext; import java.util.concurrent.TimeUnit; public class Consumer { public static void main(String[] args) throws Exception { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"consumer.xml"}); context.start(); while (true) { try { TimeUnit.SECONDS.sleep(5); IHelloService demoService = (IHelloService)context.getBean("helloService"); String result = demoService.sayHello("world"); System.out.println(result); } catch (Exception e) { e.printStackTrace(); } } } } Ejecute el método principal de
Consumerpara iniciar el servicio.
Verificar el consumidor
Después del inicio, la consola imprime continuamente:
hello world
Esta salida confirma que el consumidor está llamando correctamente al proveedor.
Inicie sesión en la consola de Nacos en http://127.0.0.1:8848 y haga clic en Services en el panel de navegación izquierdo. Seleccione Callers.
El servicio com.alibaba.edas.IHelloService aparece en la lista, junto con su Service Group y su Subscriber IP.
Paso 3: Desplegar en SAE
Empaquete el proveedor y el consumidor como archivos JAR ejecutables y luego despliéguelos en SAE.
3.1 Agregar el plugin de compilación
Agregue la siguiente configuración de <build> al archivo pom.xml de cada proyecto:
-
Provider — establezca
mainClassencom.alibaba.sae.Provider:<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.sae.Provider</mainClass> </configuration> </execution> </executions> </plugin> </plugins> </build> -
Consumer — establezca
mainClassencom.alibaba.sae.Consumer:<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.sae.Consumer</mainClass> </configuration> </execution> </executions> </plugin> </plugins> </build>
3.2 Compilar los paquetes JAR
En el directorio de cada proyecto, ejecute:
mvn clean package
Esto genera un JAR ejecutable en el directorio target/.
3.3 Desplegar en SAE
Despliegue ambos paquetes JAR en SAE. Para conocer los pasos de despliegue, consulte Deploy a Java application.
Después del despliegue, SAE reemplaza automáticamente la dirección del registro local de Nacos ( nacos://127.0.0.1:8848 ) por la dirección del registro de servicios gestionado por SAE. No es necesario realizar cambios en sus archivos de configuración.
Pasos siguientes
Deploy a Java application — opciones completas de despliegue para aplicaciones basadas en JAR en SAE