Directorio de artículos
I. Introducción
Hasta ahora, se ha publicado la serie de artículos de puerta de enlace de microservicio:
- [Cloud Native & Microservices > SCG Gateway Part 1] Por qué hay una puerta de enlace y cómo elegir una puerta de enlace en un entorno de producción
- Cloud Native y Microservices > SCG Gateway Part 2] Esos métodos de liberación en escala de grises en producción
- [Cloud Native & Microservices > SCG Gateway Part 3] ¿Qué es Spring Cloud Gateway y casos de uso detallados?
- Cloud Native & Microservices > SCG Gateway Part 4] Cómo usar las 11 PredicateFactorys integradas en Spring Cloud Gateway
- [Cloud Native & Microservices > SCG Gateway Part 5] Spring Cloud Gateway Custom PredicateFactory
- [Cloud Native & Microservices > SCG Gateway Chapter 6] 18 posturas de uso de filtros integradas en Spring Cloud Gateway
- [Cloud Native & Microservices > SCG Gateway Chapter 7] Spring Cloud Gateway implementa la limitación, la fusión y el reintento actuales en función de los filtros integrados
- [Cloud native & microservices > SCG gateway chapter 8] Spring Cloud Gateway tres formas de personalizar Filter y GlobalFilter
Se trataron los siguientes temas:
- ¿Por qué tener una puerta de enlace? ¿Cuál es el papel de una puerta de enlace?
- ¿Clasificación de las puertas de enlace?
- ¿Selección de tecnología de puerta de enlace?
- ¿Cuáles son los métodos de publicación en escala de grises comúnmente utilizados cuando se utilizan puertas de enlace?
- ¿Qué es Spring Cloud Gateway? ¿Caso de uso detallado?
- 11 tipos de PredicateFactory integrados en Spring Cloud Gateway
- ¿Cómo personalizar PredicateFactory?
- 18 filtros de uso común integrados en Spring Cloud Gateway
- Spring Cloud Gateway implementa la limitación, la fusión y el reintento actuales en función de los filtros integrados
- Tres formas de personalizar Filter y GlobalFilter en Spring Cloud Gateway
Este artículo continúa hablando sobre el caso de integración de Spring Cloud Gateway y el registro del servicio Nacos.
PD: información de la versión de SpringCloud:
<properties>
<spring-boot.version>2.4.2</spring-boot.version>
<spring-cloud.version>2020.0.1</spring-cloud.version>
<spring-cloud-alibaba.version>2021.1</spring-cloud-alibaba.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--整合spring cloud-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--整合spring cloud alibaba-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
2. Gateway, caso de integración de Nacos
El directorio general del proyecto incluye dos módulos: nacos-gateway y nacos-provider-service.
Entre ellos, nacos-gateway se utiliza como puerta de enlace de enrutamiento y nacos-provider-service está integrado en Gateway como un microservicio común.
0. El principal proyecto padre spring-cloud-alibaba-center
Solo one y pom están reservados en el proyecto spring-cloud-alibaba-center, que se utiliza para la gestión de dependencias maven del proyecto general
1)pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>spring-cloud-alibaba-center</artifactId>
<groupId>com.saint</groupId>
<version>0.0.1-SNAPSHOT</version>
<name>spring-cloud-alibaba-center</name>
<packaging>pom</packaging>
<modules>
<module>gateway-center</module>
<module>simple-service</module>
</modules>
<properties>
<java.version>1.8</java.version>
<spring-boot.version>2.4.2</spring-boot.version>
<spring-cloud.version>2020.0.1</spring-cloud.version>
<spring-cloud-alibaba.version>2021.1</spring-cloud-alibaba.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--整合spring cloud-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--整合spring cloud alibaba-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<!-- java编译插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
1. Servicio común nacos-proveedor-servicio
El directorio de estructura de código general del proyecto nacos-provider-service es el siguiente:
Contiene un archivo pom.xml, un archivo de configuración application.yml, una clase de inicio y un controlador.
1, pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>spring-cloud-alibaba-center</artifactId>
<groupId>com.saint</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>nacos-gateway</artifactId>
<version>0.0.1-SNAPSHOT</version>
<description>nacos-gateway</description>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<!--负载均衡器,如果不引入,或报错503-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>
<!--集成nacos-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
</dependencies>
</project>
2, aplicación.yml
Establezca el puerto y el nombre del programa del servicio y registre el servicio con el registro de servicios Nacos.
server:
port: 10001
spring:
application:
name: gateway-nacos-provider
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
3. Inicie la clase NacosProviderApplication
package com.saint.nacos;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @author Saint
*/
@SpringBootApplication
public class NacosProviderApplication {
public static void main(String[] args) {
SpringApplication.run(NacosProviderApplication.class, args);
}
}
4, Hola Controlador
package com.saint.nacos.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author Saint
*/
@RestController
@RequestMapping("hello")
public class HelloController {
@GetMapping("/sayHello")
public String say() {
System.out.println("[simple-service]:say Hello!");
return "[simple-service]:say Hello!";
}
}
5. Inicie el servicio de proveedor de nacos
Después de que el inicio sea exitoso, la salida de la consola es la siguiente:
6. Inicie nacos-proveedor-servicio-10002
Ingrese Edit Configurations
, copie uno NacosProviderApplication
, asígnele un nombre y configúrelo NacosProviderApplication-10002
en los argumentos del programa para --server.port=10002
iniciar NacosProviderApplication-10002, la salida del registro de la consola es la siguiente:
7. Ingrese al panel de control de Nacos
La información de registro del servicio en este momento es la siguiente: dos instancias del servicio de proveedor de gateway-nacos;
2. Construya la puerta de enlace de nacos
El directorio de estructura de código general de nacos-gateway es el siguiente:
Contiene un archivo pom.xml, un archivo de configuración application.yml y una clase de inicio;
1, pom.xml
Hay dos puntos en el archivo pom que necesitan atención:
- Dado que Gateway usa Reactive,
spring-boot-starter-web
no se pueden aplicar dependencias; - Debido a que hay varias instancias del servicio, debe introducirse
spring-cloud-loadbalancer
para equilibrar la carga;
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>spring-cloud-alibaba-center</artifactId>
<groupId>com.saint</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>nacos-gateway</artifactId>
<version>0.0.1-SNAPSHOT</version>
<description>nacos-gateway</description>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<!--负载均衡器,如果不引入,或报错503-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>
<!--集成nacos-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
</dependencies>
</project>
2, aplicación.yml
server:
port: 9999
spring:
application:
name: nacos-gateway
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
gateway:
discovery:
locator:
# 开启从注册中心动态创建路由的功能
enabled: true
# 是否使用service-id的小写,默认是大写
lower-case-service-id: true
routes:
- id: gateway-nacos-service-route
# 其中配置的lb://表示从注册中心获取服务,后面的gateway-nacos-provider表示目标服务在注册中心上的服务名
uri: lb://gateway-nacos-provider
predicates:
- Path=/nacos/**
filters:
# 路由转发请求时,移除一层路径
- StripPrefix=1
3. Inicie la clase NacosGatewayApplication
package com.saint.gateway;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @author Saint
*/
@SpringBootApplication
public class NacosGatewayApplication {
public static void main(String[] args) {
SpringApplication.run(NacosGatewayApplication.class, args);
}
}
4. Inicie la puerta de enlace de gnacos
Después de que el inicio sea exitoso, la salida de la consola es la siguiente:
Puede ver que el número de puerto de Netty Server al que Gateway brinda servicios externamente es nuestro 9999 personalizado;
5, Tablero de Nacos
La información de registro del servicio en este momento es la siguiente: dos instancias del servicio de proveedor de gateway-nacos y una instancia del servicio de gateway-nacos;
3. Verificación del efecto de equilibrio de carga/enrutamiento
En los pasos anteriores, iniciamos nacos-provider-service y nacos-gateway a su vez;
Acceda al servicio de proveedor de nacos a través de Gateway (cuatro visitas):
efecto de equilibrio de carga
1> Primero mire la salida de la consola NacosProviderApplication:
2> Primero mire la salida de la consola NacosProviderApplication-10002:
combinada con la salida de la consola de las dos instancias de servicio, se accede a la instancia de servicio registrada en Nacos a través de la puerta de enlace para lograr el equilibrio de carga.
4. Resumen
La integración Spring Cloud Gateway de Nacos es la solución de integración principal en el ecosistema Spring Cloud, y el caso general sigue siendo muy simple.
En la publicación de blog de seguimiento, continuaremos hablando sobre cómo integrar actuadores en Spring Cloud Gateway para rastrear el estado del servicio e integrar zipkin para rastrear la información del enlace de llamada de servicio.