Spring Cloud Gateway介绍 - -基础概念,简单工作原理和配置示例

发布于:2025-07-13 ⋅ 阅读:(20) ⋅ 点赞:(0)

Spring Cloud Gateway 是 Spring Cloud 生态系统中的一个 API 网关服务,基于 Spring 5、Spring Boot 2 和 Project Reactor 等技术开发,旨在为微服务架构提供一种简单、有效且统一的 API 路由管理方式。

核心概念

1. 路由(Route)

路由是网关的基本构建块,由 ID、目标 URI、断言集合和过滤器集合组成。当断言匹配时,请求会被转发到目标 URI 并经过一系列过滤器处理。

2. 断言(Predicate)

使用 Java 8 的 Predicate 接口,开发者可以匹配 HTTP 请求中的任何内容(如 headers 或参数),只有匹配的请求才会被路由。

3. 过滤器(Filter)

Spring Cloud Gateway 中的过滤器分为两种:

  • Gateway Filter:作用于单个路由
  • Global Filter:作用于所有路由

主要特性

  1. 动态路由:能够匹配任何请求属性,支持动态路由配置
  2. 请求限流:内置的请求限流功能
  3. 路径重写:支持路径重写
  4. 断路器集成:与 Hystrix 断路器集成
  5. 服务发现集成:支持与 Eureka、Consul 等服务发现组件集成
  6. 安全控制:易于与 Spring Security 集成
  7. 监控:提供监控端点
  8. 高性能:基于 Netty 的非阻塞异步模型

工作原理

Spring Cloud Gateway 的工作流程如下:

  1. 客户端向 Spring Cloud Gateway 发出请求
  2. 网关处理程序映射确定与请求匹配的路由
  3. 请求通过网关过滤器链处理
  4. 过滤器可以在发送代理请求之前或之后执行逻辑
  5. 代理请求被发出
  6. 响应通过过滤器链返回给客户端

配置示例

基本路由配置

spring:
  cloud:
    gateway:
      routes:
      - id: example-service
        uri: http://example.com
        predicates:
        - Path=/example/**
        filters:
        - RewritePath=/example/(?<segment>.*), /$\{segment}

集成服务发现

spring:
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true
          lowerCaseServiceId: true
      routes:
      - id: user-service
        uri: lb://user-service
        predicates:
        - Path=/api/users/**

常用过滤器

  1. AddRequestHeader:添加请求头
  2. AddRequestParameter:添加请求参数
  3. AddResponseHeader:添加响应头
  4. PrefixPath:添加路径前缀
  5. RequestRateLimiter:请求限流
  6. Retry:重试机制
  7. Hystrix:熔断器
  8. FallbackHeaders:熔断时的回退头

自定义开发

自定义过滤器

@Component
public class CustomFilter implements GlobalFilter, Ordered {

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        // 前置处理
        exchange.getRequest().mutate().header("X-Custom-Header", "value");
        
        return chain.filter(exchange).then(Mono.fromRunnable(() -> {
            // 后置处理
            exchange.getResponse().getHeaders().add("X-Response-Header", "value");
        }));
    }

    @Override
    public int getOrder() {
        return -1; // 过滤器执行顺序
    }
}

自定义路由定位器

@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
    return builder.routes()
            .route("path_route", r -> r.path("/get")
                .uri("http://httpbin.org"))
            .route("host_route", r -> r.host("*.myhost.org")
                .uri("http://httpbin.org"))
            .build();
}

性能优化建议

  1. 合理配置路由数量,避免过多路由影响匹配效率
  2. 使用缓存过滤器缓存频繁访问的响应
  3. 合理配置连接池大小
  4. 启用响应压缩
  5. 合理使用熔断和降级策略

与 Zuul 的比较

  1. 性能:Spring Cloud Gateway 基于 Netty 和 Reactor,性能优于 Zuul 1.x
  2. 功能:Gateway 提供了更丰富的路由和过滤功能
  3. 扩展性:Gateway 更易于扩展和自定义
  4. 异步支持:Gateway 原生支持异步非阻塞模型

Spring Cloud Gateway 是构建现代微服务架构的理想选择,特别适合需要高性能、灵活路由和丰富过滤功能的场景。


网站公告

今日签到

点亮在社区的每一天
去签到