En este tutorial, creará un registro de servicios en Microservices Engine (MSE) para una aplicación Apache Dubbo y lo utilizará para el registro y descubrimiento de servicios. Al finalizar, un consumidor Dubbo que se ejecuta en su computadora local llamará a un proveedor descubierto a través de un registro Nacos de MSE.
Arquitectura
La aplicación de ejemplo es una aplicación de microservices Dubbo compuesta por un proveedor y un consumidor. Desarrollará ambos roles como dos proyectos Maven independientes en su computadora local, y ambos se conectarán a la misma instancia de registro en MSE mediante su endpoint público.
Proyecto del proveedor: expone la interfaz
com.alibaba.mse.IHelloServicecomo un servicio Dubbo en el puerto 28082 y registra el servicio en la instancia de registro de MSE.Proyecto del consumidor: se suscribe a
com.alibaba.mse.IHelloServicemediante la misma instancia de registro y llama al proveedor.Instancia de registro en MSE: funciona como el registro de servicios donde se registra el proveedor y al que se suscribe el consumidor.
Tipos de registro
MSE puede alojar un registro de servicios Nacos, ZooKeeper o Eureka para una aplicación Dubbo. Este tutorial utiliza MSE Nacos, y todos los ejemplos de configuración de este tema están orientados a una instancia de MSE Nacos.
Nacos (utilizado en este tutorial): establezca la dirección del registro Dubbo en el endpoint público de su instancia de MSE Nacos. No se requiere ninguna otra configuración específica del registro.
ZooKeeper: si utiliza MSE ZooKeeper como registro de servicios, reemplace el código de registro del Paso 2 con el código correspondiente para ZooKeeper. Para obtener más información, consulte Usage notes.
Requisitos previos
Descargue Maven y configure las variables de entorno.
Tener instalado un IDE, como IntelliJ IDEA o Eclipse, en su computadora local.
Una instancia de MSE Nacos. Para consultar las instrucciones, véase Create a Nacos engine instance
Create a namespace. Este tutorial utiliza el namespace predeterminado,
Public.
Paso 1: Crear el proyecto del proveedor y definir el servicio
En este paso, creará el proyecto Maven para el proveedor y definirá el servicio que expone. En Dubbo, todos los servicios se proporcionan como interfaces.
En su IDE, cree un proyecto Maven para el proveedor.
-
Agregue las dependencias
dubboynacos-cliental archivopom.xml.<dependencies> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo</artifactId> <version>2.7.9</version> </dependency> <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> <version>1.4.2</version> </dependency> </dependencies> En el directorio
src/main/java, cree un paquete llamadocom.alibaba.mse.-
En
com.alibaba.mse, cree una interfaz llamadaIHelloServiceque contenga un métodosayHello.package com.alibaba.mse; public interface IHelloService { String sayHello(String str); } -
En
com.alibaba.mse, cree una clase llamadaIHelloServiceImplque implemente la interfaz.package com.alibaba.mse; public class IHelloServiceImpl implements IHelloService { public String sayHello(String str) { return "hello " + str; } }
Paso 2: Configurar el proveedor para usar MSE Nacos como registro
En este paso, creará el archivo provider.xml, el cual expone IHelloService como un servicio Dubbo y dirige al proveedor hacia la instancia de MSE Nacos. Obtenga primero el endpoint de la instancia, ya que es necesario para la configuración del registro.
Inicie sesión en la consola de MSE y consulte el endpoint público de la instancia Nacos que creó en MSE. El endpoint público se muestra en la columna Access Method de la lista de instancias y tiene el formato
mse.XX.nacos.mse.aliyuncs.com.En el directorio
src/main/resourcesdel proyecto del proveedor, cree un archivo llamadoprovider.xml.-
Agregue la siguiente configuración a
provider.xml. Reemplacemse.XX.nacos.mse.aliyuncs.comcon el endpoint público de su instancia Nacos.<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"> <dubbo:application name="demo-provider"/> <dubbo:protocol name="dubbo" port="28082"/> <dubbo:service interface="com.alibaba.mse.IHelloService" ref="helloService"/> <bean id="helloService" class="com.alibaba.mse.IHelloServiceImpl"/> <dubbo:registry address="nacos://mse.XX.nacos.mse.aliyuncs.com:8848" /> </beans>
La siguiente tabla describe la configuración en provider.xml.
|
Elemento |
Descripción |
|
|
Declara el Namespace XML de Spring (xmlns) y la instancia de esquema XML (xmlns:xsi), así como el Namespace de Dubbo (xmlns:dubbo) y la instancia de esquema (xsi:schemaLocation). |
|
|
Nombre de la aplicación proveedora. Este ejemplo utiliza |
|
|
Publica el servicio mediante el protocolo dubbo en el puerto 28082. |
|
|
Exponen la interfaz |
|
|
Especifica la instancia Nacos creada en MSE como registro de servicios. La dirección corresponde al endpoint público de la instancia. |
Paso 3: Permitir que el proveedor acceda a la instancia de MSE
El proveedor se conecta al registro mediante el endpoint público de la instancia de MSE, por lo que la lista de permitidos de la instancia debe autorizar el tráfico. Complete este paso antes de iniciar el proveedor; de lo contrario, el registro fallará.
En la consola de MSE, en el panel de navegación izquierdo, elija . En la página Instances, haga clic en la instancia de MSE que creó.
Borre la lista de permitidos de la instancia. Si no especifica ninguna dirección IP o máscara, todas las direcciones podrán acceder a la instancia. Este tutorial utiliza una lista de permitidos vacía como ejemplo. Para obtener más información, consulte Set a whitelist.
Una lista de permitidos vacía permite que todas las direcciones accedan a la instancia de MSE.
Paso 4: Iniciar el proveedor y verificar el registro
En este paso, iniciará el proveedor y confirmará en la consola de MSE que el servicio está registrado en la instancia Nacos.
-
En
com.alibaba.mse, cree una clase llamadaProvider. Utilice el siguiente código para cargar el contexto de Spring en el métodomaindeProvidery exponer el servicio Dubbo que configuró.package com.alibaba.mse; 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
maindeProviderpara iniciar el servicio. Mantenga el proceso en ejecución hasta que termine el tutorial, ya que el consumidor llamará a este proceso.En la consola de MSE, en la página de detalles de su instancia de MSE, elija en el panel de navegación izquierdo.
Compruebe que la lista de servicios contiene
com.alibaba.mse.IHelloService, la interfaz que expone la aplicacióndemo-provider.
No continúe con el siguiente paso hasta que la interfaz aparezca en la lista de servicios. Si la interfaz no aparece, revise las siguientes configuraciones:
Lista de permitidos: la lista de permitidos de la instancia de MSE autoriza la dirección de su computadora local. Una lista vacía permite todas las direcciones.
Dirección del registro: la dirección
dubbo:registryenprovider.xmlutiliza el endpoint público de su instancia, no el marcador de posiciónmse.XX.nacos.mse.aliyuncs.com.Tipo de registro: la dirección
dubbo:registryutiliza el esquema del tipo de instancia que creó, comonacos://para una instancia de MSE Nacos.
Paso 5: Crear el consumidor y suscribirse al servicio
En este paso, creará un segundo proyecto Maven para el consumidor, se suscribirá a com.alibaba.mse.IHelloService mediante la misma instancia de MSE Nacos e implementará la clase que llama al proveedor.
En su IDE, cree un segundo proyecto Maven para el consumidor.
Agregue las dependencias
dubboynacos-cliental archivopom.xmldel proyecto del consumidor. Las dependencias son idénticas a las del proyecto del proveedor en el Paso 1.En el directorio
src/main/java, cree el paquetecom.alibaba.msey agregue la interfazIHelloServiceque definió en el Paso 1. El consumidor referencia el servicio por su interfaz, por lo que esta debe estar en el classpath del proyecto del consumidor.-
En el directorio
src/main/resourcesdel proyecto del consumidor, cree un archivo llamadoconsumer.xml. Reemplacemse.XX.nacos.mse.aliyuncs.comcon el endpoint público de su instancia Nacos, que es el mismo endpoint que configuró enprovider.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"> <dubbo:application name="demo-consumer"/> <dubbo:registry address="nacos://mse.XX.nacos.mse.aliyuncs.com:8848" /> <dubbo:reference id="helloService" interface="com.alibaba.mse.IHelloService"/> </beans>El elemento
dubbo:registrydirige al consumidor al mismo registro que el proveedor, y el elementodubbo:referencese suscribe a la interfazcom.alibaba.mse.IHelloServiceque expone el proveedor. -
En
com.alibaba.mse, cree una clase llamadaConsumer. Utilice el siguiente código para cargar el contexto de Spring en el métodomaindeConsumery llamar al métodosayHellodel servicio suscrito.package com.alibaba.mse; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Consumer { public static void main(String[] args) throws Exception { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"consumer.xml"}); context.start(); IHelloService helloService = (IHelloService) context.getBean("helloService"); System.out.println(helloService.sayHello("mse")); } }
Paso 6: Verificar la llamada del consumidor al proveedor
En este paso, confirmará que el consumidor descubre al proveedor mediante el registro de MSE Nacos y recibe la respuesta del método sayHello. El consumidor pasa mse como argumento, y IHelloServiceImpl devuelve hello seguido de dicho argumento.
Confirme que el proceso del proveedor que inició en el Paso 4 sigue en ejecución.
Ejecute el método
maindeConsumer.-
Revise la salida de consola del proyecto del consumidor. La siguiente salida indica que el consumidor llamó correctamente al proveedor:
hello mse
Si la llamada falla o no se devuelve ninguna salida, revise las siguientes configuraciones:
Disponibilidad del proveedor: el proceso del proveedor se está ejecutando y
com.alibaba.mse.IHelloServiceaparece en la lista de servicios de la instancia de MSE.Dirección del registro: la dirección
dubbo:registryenconsumer.xmles el endpoint público que configuró enprovider.xml.Nombre de la interfaz: la interfaz en el elemento
dubbo:referencedeconsumer.xmlcoincide concom.alibaba.mse.IHelloService, que es la interfaz definida en el elementodubbo:servicedeprovider.xml.Lista de permitidos: la lista de permitidos de la instancia de MSE autoriza la dirección de su computadora local.