Los microservicios se han convertido en la arquitectura de tecnología principal que persiguen los principales fabricantes. La perspectiva de aprender microservicios es muy prometedora, y SpringCloud se ha convertido en la pila de tecnología de microservicios principal. Esta serie de artículos se centrará en la pila de tecnología SpringCloud y analizará y explicará exhaustivamente la aplicación real de la pila de tecnología SpringCloud en el escenario de microservicio.
Puerta de enlace de la nube de primavera
Índice de conocimiento
- Introducción a la puerta de enlace
- Empezando
- prefijo de enrutamiento
- filtrar
1 Introducción a la puerta de enlace
Spring Cloud Gateway
Es Spring Cloud
un proyecto completamente nuevo del equipo, una pasarela basada en tecnologías como Spring 5.0
, , SpringBoot2.0
, Project Reactor
etc. Su objetivo es proporcionar un REST
método de gestión de enrutamiento de solicitudes simple, efectivo y unificado para la arquitectura de microservicios.
Spring Cloud Gateway
Como SpringCloud
puerta de entrada en el ecosistema, el objetivo es reemplazar Netflix Zuul
. Gateway
No solo proporciona un método de enrutamiento unificado, sino que también Filter
proporciona las funciones básicas de la puerta de enlace basadas en el método de cadena. Por ejemplo: seguridad, supervisión/métricas y limitación.
2 Primeros pasos
spring_cloud_demos
Crear gateway_demo
submódulos en el proyecto.
2.1 Introducción de dependencias
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR12</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
2.2 Clase de inicio
/**
* Copyright (c) 2022 itmentu.com, All rights reserved.
*
* @Author: yang
*/
@SpringBootApplication
public class GateWayDemoApplication {
public static void main(String[] args) {
SpringApplication.run(GateWayDemoApplication.class, args);
}
}
2.3 Configuración
server:
port: 8502
spring:
application:
name: gateway
cloud:
consul:
host: 192.168.184.128
port: 8500
discovery:
service-name: ${
spring.application.name}
register: false
2.4 Configuración de enrutamiento
gateway:
# 路由si(集合)
routes:
# id唯一标识
- id: consumer-service-route
# 路由服务地址
uri: lb://service-consumer
# 断言
predicates:
- Path=/**
Descripción del código:
1:routes:id表示路由标识,唯一即可,当前案例中表示消费者服务对应的路由
2:uri: lb://service-consumer表示uri使用负载均衡模式,lb表示loadbalance,”lb:“后跟注册中心对应的服务名
2.5 Transformar el servicio original del consumidor del servicio
Agregar @EnableDiscoveryClient
registro de anotación para abrir el centro de registro
/**
* Copyright (c) 2022 itmentu.com, All rights reserved.
*
* @Author: yang
*/
@SpringBootApplication
@EnableFeignClients
@EnableCircuitBreaker
@EnableHystrixDashboard
@EnableDiscoveryClient
public class ServiceConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceConsumerApplication.class, args);
}
@Bean
@LoadBalanced//开启负载均衡
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
Modificar la configuración para registrarse en el registro
spring:
cloud:
consul:
discovery:
register: true
2.6 Pruebas
Acceda a la interfaz de servicio al consumidor por http://localhost:8502/consumer/hello-feign
dirección
3 prefijo de enrutamiento
3.1 Agregar prefijo
La adición de prefijos en la ruta mapeada se gateway
puede lograr configurando el filtro de la ruta en . PrefixPath
Puede desempeñar el papel de ocultar la dirección de la interfaz y evitar la exposición de la dirección de la interfaz.
Configure la dirección de solicitud para agregar un filtro de prefijo de ruta
spring:
gateway:
routes:
filters:
- PrefixPath=/consumer
prueba
Reiniciar el acceso al servicio de enrutamiento
http://localhost:8502/hello-feign
El resultado es el siguiente, indicando que la ruta a
http://localhost:8002/consumer/hello-feign
3.2 Eliminar prefijo
Al gateway
configurar un filtro de ruta en StripPrefix
, se pueden eliminar las direcciones en la ruta asignada. Pase StripPrefix=1
para especificar el número de prefijos que se eliminarán de la ruta. Por ejemplo: la ruta /api/consumer/hello-feign
se enrutará a/consumer/hello-feign
Configurar eliminar filtro de prefijo de ruta
spring:
gateway:
routes:
filters:
- StripPrefix=1
prueba
Reiniciar el acceso al servicio de enrutamiento
http://localhost:8502/api/consumer/hello-feign
El resultado es el siguiente, indicando que está enrutado a
/consumer/hello-feign
4 filtros
Una de las funciones importantes de un filtro como puerta de enlace es implementar la autenticación de solicitudes. 路由前缀
Las funciones de los capítulos anteriores también se implementan mediante filtros.
4.1 Filtros comunes
Gateway
Hay docenas de filtros integrados. Los filtros integrados comunes incluyen:
nombre del filtro | ilustrar |
---|---|
TiraPrefijo | Eliminar el prefijo de la ruta de solicitud coincidente |
prefijoruta | Prefijo la ruta de solicitud coincidente |
AddRequestHeader | Agregar encabezado a la solicitud coincidente |
AddRequestParameter | Agregar parámetros a las solicitudes coincidentes |
Agregar encabezado de respuesta | Agregar encabezado a la respuesta devuelta desde la puerta de enlace |
4.2 Escenarios comunes
- Solicitar autenticación: si no tiene derechos de acceso, interceptar directamente
- Manejo de excepciones: registrar registros de excepciones
- Estadísticas de duración de llamadas de servicio
4.3 Instrucciones de configuración del filtro
Gateway
Hay dos filtros
局部过滤器:只作用在当前配置的路由上,上面我们配置的路由前缀过滤器就是局部过滤器
全局过滤器:作用在所有路由上。
4.4 Demostración de la configuración del filtro global
Filtro de configuración globalAddResponseHeader
spring:
cloud:
gateway:
# 配置全局默认过滤器
default-filters:
# 往响应过滤器中加入信息
- AddResponseHeader=key1,value1
prueba
Los encabezados de respuesta se pueden ver en el navegador