Spring Cloud Gateway 是一个基于 Spring 生态系统的 API 网关,旨在为微服务架构提供动态路由、监控、弹性、安全和限流等功能。它是 Spring Cloud 的一部分,提供了基于 Spring WebFlux 的非阻塞反应式编程模型,与 Spring Boot、Spring Cloud 其他组件无缝集成。
Spring Cloud Gateway 的架构基于三大核心概念:Route(路由)、Predicate(谓词)和Filter(过滤器)。
下面是一个简单的 Spring Cloud Gateway 示例,包括项目创建、配置和使用。
使用 Spring Initializr 创建一个新的 Spring Boot 项目,选择以下依赖:
在 pom.xml
中添加 Spring Cloud Gateway 依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
在 application.yml
中配置路由和过滤器:
server:
port: 8080
spring:
application:
name: gateway-service
cloud:
gateway:
routes:
- id: eureka-client
uri: http://localhost:8081 # 转发目标地址
predicates:
- Path=/client/** # 路由断言条件
filters:
- StripPrefix=1 # 过滤器:去除路径前缀
- AddRequestHeader=X-Request-Gateway, Gateway # 添加请求头
- id: another-service
uri: lb://another-service # 负载均衡服务
predicates:
- Method=GET
- Header=X-Request-Type, special
filters:
- Hystrix=another-service-fallback # 熔断处理
default-filters:
- AddResponseHeader=Gateway-Version, 1.0.0
management:
endpoints:
web:
exposure:
include: "*"
Spring Cloud Gateway 提供了多种路由断言,可以用来匹配请求:
- Path=/client/**
- Method=GET
- Header=X-Request-Type, special
Spring Cloud Gateway 支持多种过滤器,可以对请求和响应进行修改:
- StripPrefix=1
- AddRequestHeader=X-Request-Gateway, Gateway
- Hystrix=another-service-fallback
运行项目的主类 GatewayServiceApplication
:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class GatewayServiceApplication {
public static void main(String[] args) {
SpringApplication.run(GatewayServiceApplication.class, args);
}
}
启动服务后,可以通过以下方式测试路由:
测试 /client
路由:
curl -H "X-Request-Gateway: Gateway" http://localhost:8080/client/hello
该请求会被路由到 http://localhost:8081/hello
。
测试负载均衡路由:
curl -H "X-Request-Type: special" http://localhost:8080/another-service/hello
该请求会被负载均衡地路由到名为 another-service
的服务实例。
Spring Cloud Gateway 提供了一种强大的方式来管理微服务的路由和过滤。通过配置路由断言和过滤器,可以轻松实现请求的动态路由、负载均衡和流量控制。
如果有其他问题或者需要进一步的帮助,请随时告诉我!