Una pasarela de servicio enruta las solicitudes entrantes de los clientes hacia los microservices del backend según reglas configurables, como la ruta de la URL, los encabezados o los parámetros de consulta. Este tema explica cómo compilar una pasarela con Nacos como registro de servicios, ya sea mediante Spring Cloud Gateway o Spring Cloud Netflix Zuul.
Para omitir la configuración paso a paso, descargue los proyectos de demostración completos:
Cómo enruta las solicitudes Spring Cloud Gateway
Spring Cloud Gateway procesa las solicitudes mediante tres componentes fundamentales:
|
Componente |
Descripción |
|
Ruta |
Es el bloque de construcción básico. Cada ruta asigna una solicitud entrante a un servicio del backend y se define mediante un ID, una URI de destino, uno o más predicados y filtros opcionales. |
|
Predicado |
Condición de coincidencia que se evalúa frente a la solicitud entrante (ruta, encabezado, parámetro de consulta, etc.). Una ruta coincide cuando todos sus predicados devuelven verdadero. |
|
Filtro |
Paso de procesamiento que modifica la solicitud o la respuesta antes o después del reenvío. Por ejemplo, |
Flujo de la solicitud: Cliente -> Asignación de controladores de la pasarela (coincide con una ruta al evaluar los predicados) -> Controlador web de la pasarela (ejecuta la cadena de filtros) -> Servicio del backend. Los filtros se ejecutan tanto antes como después de la solicitud proxy, lo que permite modificar encabezados, reescribir rutas o agregar autenticación en el nivel de la pasarela.
Requisitos previos
Antes de empezar, asegúrese de contar con lo siguiente:
Maven instalado con las variables de entorno configuradas
La versión más reciente de Nacos Server descargada
-
Opcional:
Al desarrollar aplicaciones localmente, puede usar el plugin de 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.
Iniciar Nacos Server
Descomprima el paquete de Nacos Server descargado.
-
Vaya al directorio
nacos/bine inicie Nacos Server en modo independiente:-
Linux, UNIX o macOS:
sh startup.sh -m standalone Windows: haga doble clic en
startup.cmd.
-
Compilar una pasarela de servicio con Spring Cloud Gateway
Spring Cloud Gateway se basa en Project Reactor y Spring WebFlux, y proporciona una pasarela reactiva sin bloqueo.
Paso 1: Crear el proyecto de la pasarela
Cree un proyecto de Maven llamado
spring-cloud-gateway-nacos.-
Agregue las siguientes dependencias a
pom.xml. Este ejemplo usa Spring Boot 2.1.4.RELEASE y Spring Cloud Greenwich.SR1:<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.4.RELEASE</version> <relativePath/> </parent> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.1.1.RELEASE</version> </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> -
Cree la clase de inicio
GatewayApplication:@SpringBootApplication @EnableDiscoveryClient public class GatewayApplication { public static void main(String[] args) { SpringApplication.run(GatewayApplication.class, args); } }
Paso 2: Configurar las reglas de enrutamiento
Agregue la siguiente configuración a application.yaml. Reemplace 127.0.0.1:8848 por la dirección real de su Nacos Server si se ejecuta en una máquina diferente.
server:
port: 18012
spring:
application:
name: spring-cloud-gateway-nacos
cloud:
gateway:
routes:
- id: service-provider
uri: lb://service-provider
predicates:
- Path=/provider1/**
filters:
- StripPrefix=1
nacos:
discovery:
server-addr: 127.0.0.1:8848
Esta configuración de ruta funciona de la siguiente manera:
|
Componente |
Valor |
Descripción |
|
Predicado |
|
Coincide con todas las solicitudes cuya ruta comienza con |
|
URI |
|
Reenvía las solicitudes coincidentes al servicio |
|
Filtro |
|
Elimina el primer segmento de la ruta antes del reenvío. Por ejemplo, |
Paso 3: Iniciar la pasarela y verificar el registro
Ejecute la función principal de
GatewayApplicationpara iniciar la pasarela.Abra la consola de Nacos Server en
http://127.0.0.1:8848/nacos(nombre de usuario y contraseña predeterminados:nacos).En el panel de navegación izquierdo, elija Service Management > Services. Confirme que
spring-cloud-gateway-nacosaparece en la lista de servicios.
Compilar una pasarela de servicio con Spring Cloud Netflix Zuul
Zuul es una opción alternativa de pasarela basada en un modelo de E/S con bloqueo. Resulta adecuada para aplicaciones que ya utilizan la pila de Netflix OSS.
Paso 1: Crear el proyecto de la pasarela
Cree un proyecto de Maven llamado
spring-cloud-zuul-nacos.-
Agregue las siguientes dependencias a
pom.xml. Este ejemplo usa Spring Boot 2.1.4.RELEASE, Spring Cloud Greenwich.SR1 y Spring Cloud Alibaba 0.9.0:<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.4.RELEASE</version> <relativePath/> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.1.1.RELEASE</version> </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> -
Cree la clase de inicio
ZuulApplication:@SpringBootApplication @EnableZuulProxy @EnableDiscoveryClient public class ZuulApplication { public static void main(String[] args) { SpringApplication.run(ZuulApplication.class, args); } }
Paso 2: Configurar las reglas de enrutamiento
Agregue la siguiente configuración a application.properties. Reemplace 127.0.0.1:8848 por la dirección real de su Nacos Server si se ejecuta en una máquina diferente.
spring.application.name=spring-cloud-zuul-nacos
server.port=18022
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
zuul.routes.opensource-provider1.path=/provider1/**
zuul.routes.opensource-provider1.serviceId=service-provider
Esto enruta todas las solicitudes con una ruta que comienza con /provider1/ hacia el servicio del backend service-provider.
Paso 3: Iniciar la pasarela y verificar el registro
Ejecute la función principal de
ZuulApplicationpara iniciar la pasarela.Abra la consola de Nacos Server en
http://127.0.0.1:8848/nacos(nombre de usuario y contraseña predeterminados:nacos).En el panel de navegación izquierdo, elija Service Management > Services. Confirme que
spring-cloud-zuul-nacosaparece en la lista de servicios.
Crear un proveedor de servicios
Tanto Spring Cloud Gateway como Zuul requieren un servicio posterior al cual reenviar las solicitudes. Para obtener todos los detalles, consulte Implement service registration and discovery.
El siguiente ejemplo crea un proveedor de servicios mínimo con un único endpoint /echo/{string}:
@SpringBootApplication
@EnableDiscoveryClient
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
@RestController
public class EchoController {
@RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)
public String echo(@PathVariable String string) {
return string;
}
}
}
Verificar el reenvío de solicitudes
Verificación local
Inicie tanto la pasarela como el proveedor de servicios, y luego envíe una solicitud a través de la pasarela.
Para Spring Cloud Gateway (puerto 18012):
curl http://127.0.0.1:18012/provider1/echo/hello
Para Zuul (puerto 18022):
curl http://127.0.0.1:18022/provider1/echo/hello
Una respuesta exitosa devuelve hello, lo que confirma que la pasarela reenvió la solicitud a service-provider y eliminó el prefijo /provider1.

Despliegue en EDAS
Despliegue la aplicación en Enterprise Distributed Application Service (EDAS). Para consultar las instrucciones de despliegue, vea Implement service registration and discovery.
El registro de servicios de EDAS es una versión comercial de Nacos. Al desplegar en EDAS, la plataforma configura automáticamente los detalles de conexión de Nacos: dirección IP, puerto de servicio, namespace, AccessKey ID, AccessKey secret y ruta de contexto. No se requiere configuración adicional. Conserve o elimine la configuración original de Nacos local según sea necesario.
Compatibilidad de versiones
|
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 lo utilice para nuevas aplicaciones.