Enterprise Distributed Application Service (EDAS) ofrece la versión de disponibilidad general (GA) del registro Nacos. Las aplicaciones Spring Cloud desarrolladas con Nacos pueden conectarse a este registro compartido sin modificar el código; basta con desplegarlas en EDAS y la plataforma gestiona automáticamente la conectividad con el registro.
Este tutorial explica cómo desarrollar dos microservices de Spring Cloud: un proveedor de servicios y un consumidor de servicios. Ambos se registran en Nacos para habilitar el descubrimiento de servicios. Al finalizar, usted tendrá:
Un servidor Nacos local ejecutándose en modo independiente.
Un proveedor de servicios registrado en Nacos que expone un endpoint REST.
Un consumidor de servicios que descubre al proveedor mediante RestTemplate y FeignClient.
El descubrimiento de servicios de extremo a extremo verificado localmente.
Tras la verificación local, despliegue ambas aplicaciones en EDAS. Consulte Deploy applications to ECS instances o Deploy applications to Kubernetes clusters.
EDAS admite varios registros, entre ellos Nacos, Eureka, ZooKeeper y Consul (autogestionados o a través de Microservice Engine (MSE)). Independientemente del registro que utilice, EDAS proporciona gestión de aplicaciones, gobernanza de microservices y capacidades PaaS nativas de la nube tras el despliegue.
Requisitos previos
Antes de empezar, asegúrese de contar con lo siguiente:
Maven instalado y las variables de entorno configuradas.
La versión más reciente de Nacos Server descargada y extraída.
Inicio de Nacos Server
Vaya al directorio
nacos/bin.-
Inicie Nacos Server en modo independiente:
-
Linux, UNIX o macOS:
sudo sh startup.sh -m standalone Windows: haga doble clic en
startup.cmd.
-
Abra
http://127.0.0.1:8848/nacosen su navegador para comprobar que Nacos Server se está ejecutando. El nombre de usuario y la contraseña predeterminados son ambosnacos.-
Opcional:
Al desarrollar aplicaciones localmente, puede utilizar el plugin Alibaba Cloud Toolkit para habilitar llamadas mutuas entre las aplicaciones locales y las aplicaciones desplegadas en EDAS, lo que se 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.
Estructura del proyecto
Este tutorial crea dos proyectos Maven independientes:
nacos-service-provider/
├── pom.xml
└── src/main/
├── java/com/aliware/edas/
│ ├── ProviderApplication.java
│ └── EchoController.java
└── resources/
└── application.properties
nacos-service-consumer/
├── pom.xml
└── src/main/
├── java/com/aliware/edas/
│ ├── ConsumerApplication.java
│ ├── EchoService.java
│ └── TestController.java
└── resources/
└── application.properties
Descargue los proyectos de demostración completos: service-provider | service-consumer.
Creación del proveedor de servicios
Paso 1: Configuración del proyecto Maven
Cree un proyecto Maven llamado nacos-service-provider y agregue las siguientes dependencias a pom.xml. Este ejemplo utiliza Spring Boot 2.1.4.RELEASE y Spring Cloud Greenwich.SR1:
La versión de Spring Cloud Alibaba debe coincidir con su versión de Spring Cloud:
|
Versión de Spring Cloud |
Versión de Spring Cloud Alibaba |
|
Greenwich |
2.1.1.RELEASE |
|
Finchley |
2.0.1.RELEASE |
|
Edgware |
1.5.1.RELEASE |
Spring Cloud Edgware ha llegado al final de su ciclo de vida. No utilice Edgware para nuevos proyectos.
Paso 2: Creación de la clase de aplicación
En src/main/java, cree el paquete com.aliware.edas y luego agregue ProviderApplication.java:
package com.aliware.edas;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient // Enables service registration and discovery
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
}
Paso 3: Adición de un controlador REST
En el mismo paquete, cree EchoController.java para exponer un endpoint /echo/{string}:
package com.aliware.edas;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class EchoController {
@RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)
public String echo(@PathVariable String string) {
return string;
}
}
Paso 4: Configuración de la dirección del registro
En src/main/resources, cree application.properties:
spring.application.name=service-provider
server.port=18081
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
Reemplace 127.0.0.1 con la dirección IP de su Nacos Server si se ejecuta en una máquina diferente. Para opciones de configuración adicionales, consulte Configuration reference.
Paso 5: Verificación del registro
Ejecute el método
maindeProviderApplicationpara iniciar el servicio.Abra la consola de Nacos en
http://127.0.0.1:8848/nacos(nombre de usuario/contraseña:nacos/nacos).Vaya a Service Management > Services.
service-provideraparece en la lista de servicios. Haga clic en Details para consultar los detalles del registro, como la IP y el puerto de la instancia.
Creación del consumidor de servicios
El consumidor demuestra dos enfoques para llamar al proveedor: RestTemplate con balanceo de carga del lado del cliente y FeignClient como cliente HTTP declarativo.
Paso 1: Configuración del proyecto Maven
Cree un proyecto Maven llamado nacos-service-consumer y agregue las siguientes dependencias a pom.xml:
Paso 2: Definición de la interfaz del cliente Feign
En src/main/java, cree el paquete com.aliware.edas y luego agregue EchoService.java:
package com.aliware.edas;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@FeignClient(name = "service-provider") // Refers to the provider's registered service name
public interface EchoService {
@RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
String echo(@PathVariable("str") String str);
}
Paso 3: Creación de la clase de aplicación
En el mismo paquete, cree ConsumerApplication.java:
package com.aliware.edas;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication
@EnableDiscoveryClient // Enables service registration and discovery
@EnableFeignClients // Activates FeignClient scanning
public class ConsumerApplication {
@LoadBalanced // Integrates RestTemplate with service discovery for client-side load balancing
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}
Resumen de anotaciones:
@EnableDiscoveryClient-- registra esta aplicación en Nacos.@EnableFeignClients-- busca interfaces@FeignClienty crea beans proxy.@LoadBalanced-- permite que RestTemplate resuelva nombres de servicio (comoservice-provider) a través del registro en lugar de DNS.
Paso 4: Adición de un controlador de prueba
En el mismo paquete, cree TestController.java con dos endpoints que llaman al proveedor mediante diferentes enfoques:
package com.aliware.edas;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@RestController
public class TestController {
@Autowired
private RestTemplate restTemplate;
@Autowired
private EchoService echoService;
// Uses RestTemplate with service discovery to call the provider
@RequestMapping(value = "/echo-rest/{str}", method = RequestMethod.GET)
public String rest(@PathVariable String str) {
return restTemplate.getForObject("http://service-provider/echo/" + str,
String.class);
}
// Uses FeignClient to call the provider
@RequestMapping(value = "/echo-feign/{str}", method = RequestMethod.GET)
public String feign(@PathVariable String str) {
return echoService.echo(str);
}
}
Paso 5: Configuración de la dirección del registro
En src/main/resources, cree application.properties:
spring.application.name=service-consumer
server.port=18082
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
Reemplace 127.0.0.1 con la dirección IP de su Nacos Server si se ejecuta en una máquina diferente.
Paso 6: Verificación del registro
Ejecute el método
maindeConsumerApplicationpara iniciar el servicio.Abra la consola de Nacos en
http://127.0.0.1:8848/nacos.Vaya a Service Management > Services.
service-consumeraparece en la lista de servicios junto aservice-provider.
Prueba local del descubrimiento de servicios
Con ambas aplicaciones en ejecución, pruebe el descubrimiento de servicios de extremo a extremo. El consumidor resuelve el nombre de servicio service-provider a través de Nacos y reenvía cada solicitud al proveedor.
Linux, UNIX o macOS:
# Test with RestTemplate
curl http://127.0.0.1:18082/echo-rest/rest-rest
# Test with FeignClient
curl http://127.0.0.1:18082/echo-feign/feign-rest
Windows: Abra las siguientes URL en su navegador:
http://127.0.0.1:18082/echo-rest/rest-resthttp://127.0.0.1:18082/echo-feign/feign-rest
Salida esperada:
|
Endpoint |
Respuesta esperada |
|
|
|
|
|
|
Si ambos endpoints devuelven el valor del parámetro de ruta, el registro y descubrimiento de servicios funcionan correctamente.
Despliegue en EDAS
Tras la verificación local, despliegue ambas aplicaciones en EDAS. EDAS proporciona un registro Nacos gestionado, por lo que sus aplicaciones se conectan a él automáticamente sin necesidad de modificar el código.
Para obtener instrucciones de despliegue, consulte:
Referencia de configuración
Nacos Discovery admite las siguientes propiedades de configuración en application.properties:
|
Elemento de configuración |
Clave |
Valor predeterminado |
Descripción |
|
Dirección del servidor |
|
Ninguna |
Dirección IP y puerto de Nacos Server |
|
Nombre del servicio |
|
|
Nombre utilizado para registrar el servicio |
|
Nombre de NIC |
|
Ninguna |
Interfaz de red cuya dirección IP se registra. Si no se especifica, toma la primera NIC de forma predeterminada |
|
Dirección IP registrada |
|
Ninguna |
Anula la IP detectada automáticamente. Tiene la máxima prioridad |
|
Puerto registrado |
|
-1 |
Detectado automáticamente de forma predeterminada |
|
Namespace |
|
Ninguna |
Aísla servicios entre entornos (por ejemplo, desarrollo, pruebas, producción) |
|
Metadatos |
|
Ninguna |
Pares clave-valor personalizados adjuntos a la instancia de servicio. Se configuran en formato Map |
|
Clúster |
|
DEFAULT |
Nombre del clúster de Nacos |
|
Endpoint |
|
UTF-8 |
Nombre de dominio para la resolución dinámica de direcciones de servidor. No es obligatorio al desplegar en EDAS |
|
Integración con Ribbon |
|
true |
Habilita el balanceo de carga basado en Ribbon con Nacos. Modifíquelo solo si es necesario |
Para consultar la referencia completa, visite Nacos Discovery en GitHub.