Todos los productos
Search
Centro de documentos

Enterprise Distributed Application Service:Implement service registration and discovery

Última actualización: Sep 05, 2026

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á:

  1. Un servidor Nacos local ejecutándose en modo independiente.

  2. Un proveedor de servicios registrado en Nacos que expone un endpoint REST.

  3. Un consumidor de servicios que descubre al proveedor mediante RestTemplate y FeignClient.

  4. 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.

Nota

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

  1. Vaya al directorio nacos/bin.

  2. Inicie Nacos Server en modo independiente:

    • Linux, UNIX o macOS:

      sudo sh startup.sh -m standalone
    • Windows: haga doble clic en startup.cmd.

  3. Abra http://127.0.0.1:8848/nacos en su navegador para comprobar que Nacos Server se está ejecutando. El nombre de usuario y la contraseña predeterminados son ambos nacos.

  4. 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:

Expand to view the code

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.4.RELEASE</version>
    <relativePath/>
</parent>

<dependencies>
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        <version>2.1.1.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Greenwich.SR1</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

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

Nota

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

  1. Ejecute el método main de ProviderApplication para iniciar el servicio.

  2. Abra la consola de Nacos en http://127.0.0.1:8848/nacos (nombre de usuario/contraseña: nacos/nacos).

  3. Vaya a Service Management > Services. service-provider aparece 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:

Expand to view the code

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.4.RELEASE</version>
    <relativePath/>
</parent>

<dependencies>
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        <version>2.1.1.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
</dependencies>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Greenwich.SR1</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

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 @FeignClient y crea beans proxy.

  • @LoadBalanced -- permite que RestTemplate resuelva nombres de servicio (como service-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

  1. Ejecute el método main de ConsumerApplication para iniciar el servicio.

  2. Abra la consola de Nacos en http://127.0.0.1:8848/nacos.

  3. Vaya a Service Management > Services. service-consumer aparece en la lista de servicios junto a service-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-rest

  • http://127.0.0.1:18082/echo-feign/feign-rest

Salida esperada:

Endpoint

Respuesta esperada

/echo-rest/rest-rest

rest-rest

/echo-feign/feign-rest

feign-rest

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

spring.cloud.nacos.discovery.server-addr

Ninguna

Dirección IP y puerto de Nacos Server

Nombre del servicio

spring.cloud.nacos.discovery.service

${spring.application.name}

Nombre utilizado para registrar el servicio

Nombre de NIC

spring.cloud.nacos.discovery.network-interface

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

spring.cloud.nacos.discovery.ip

Ninguna

Anula la IP detectada automáticamente. Tiene la máxima prioridad

Puerto registrado

spring.cloud.nacos.discovery.port

-1

Detectado automáticamente de forma predeterminada

Namespace

spring.cloud.nacos.discovery.namespace

Ninguna

Aísla servicios entre entornos (por ejemplo, desarrollo, pruebas, producción)

Metadatos

spring.cloud.nacos.discovery.metadata

Ninguna

Pares clave-valor personalizados adjuntos a la instancia de servicio. Se configuran en formato Map

Clúster

spring.cloud.nacos.discovery.cluster-name

DEFAULT

Nombre del clúster de Nacos

Endpoint

spring.cloud.nacos.discovery.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

ribbon.nacos.enabled

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.