Spring Cloud Gateway的使用
-
-
-
- [1. Spring Cloud Gateway原理](#1. Spring Cloud Gateway原理)
- [2. Spring Boot项目中集成Spring Cloud Gateway](#2. Spring Boot项目中集成Spring Cloud Gateway)
-
- [2.1 创建项目与添加依赖](#2.1 创建项目与添加依赖)
- [2.2 配置网关](#2.2 配置网关)
- [3. 高级功能与实践](#3. 高级功能与实践)
-
- [**3.1 配置过滤器**](#3.1 配置过滤器)
- [**3.2 分组路由**](#3.2 分组路由)
- [4. 监控与故障处理](#4. 监控与故障处理)
- [5. 部署与持续集成](#5. 部署与持续集成)
-
-
在微服务架构中,服务发现、动态路由、限流熔断等功能都变得尤为重要。Spring Cloud Gateway作为一款构建API网关的框架,通过整合Spring Boot和Project Reactor,提供了高度可定制的HTTP请求路由功能。既可作为微服务架构的统一入口,又能提供安全、监控、限流、网关微服务等功能。
1. Spring Cloud Gateway原理
Spring Cloud Gateway的原理主要包含:
- 路由(Route):表示一个组件,它包含了请求的匹配(Predicates)和处理函数(Filters),以及转发的目标URI。
- 匹配器(Predicate):用于匹配请求路径,从而决定是否应用路由。
- 过滤器(Filter):在请求被转发前或后,向请求或响应中添加额外的功能,如修改请求头、限流、添加监控信息等。
2. Spring Boot项目中集成Spring Cloud Gateway
2.1 创建项目与添加依赖
在Spring Boot项目中,添加Spring Cloud Gateway及相关依赖:
xml
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
2.2 配置网关
在application.yml
或application.properties
中配置网关,定义路由规则:
yaml
spring:
cloud:
gateway:
routes:
- id: user-service-route
uri: lb://user-service
predicates:
- Path=/api/user/**
filters:
- AddRequestHeader=X-Request-Origin, SpringCloudGateway
这里配置了一个简单的路由,将以/api/user/*
结尾的请求转发至user-service
服务。
3. 高级功能与实践
3.1 配置过滤器
-
使用内建过滤器:
- GatewayFilterFactory提供限流、日志、请求响应修改等过滤器。
- 示例:添加限流过滤器
RateLimiter
。
yamlspring: cloud: gateway: routes: - id: user-service-route uri: lb://user-service predicates: - Path=/api/user/** filters: - name: RequestRateLimiter args: redis-rate-limiter.replenishRate: 10 redis-rate-limiter.burstCapacity: 20
-
自定义过滤器:
- 创建自定义过滤器实现
GatewayFilter
或GlobalFilter
接口。
java@Component public class LoggingFilter implements GlobalFilter { @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { ServerHttpRequest request = exchange.getRequest(); log.info("Request Path: {}", request.getPath()); log.info("Request Method: {}", request.getMethod()); return chain.filter(exchange); } }
- 创建自定义过滤器实现
3.2 分组路由
创建多组路由,按需转发请求:
yaml
spring:
cloud:
gateway:
routes:
- id: admin-service-route
uri: lb://admin-service
predicates:
- Path=/api/admin/**
- id: user-service-route
uri: lb://user-service
predicates:
- Path=/api/user/**
每个路由对应不同的服务,这样可以清晰地管理各个微服务的请求路由。
4. 监控与故障处理
- 配置熔断机制 :以
CircuitBreaker
为依据,当请求失败次数超过设定值,自动断路以避免雪崩效应。 - 异常处理:通过编写异常处理器来展示友好的错误信息。
5. 部署与持续集成
- 打包部署:使用IDE或Maven/Gradle将项目打包成可执行jar,在容器或裸机上部署。
- 持续集成/持续部署(CI/CD):与Jenkins, GitLab CI等工具集成,实现自动化测试与部署。