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

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. 响应通过过滤器链返回给客户端

配置示例

基本路由配置

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

集成服务发现

yaml 复制代码
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:熔断时的回退头

自定义开发

自定义过滤器

java 复制代码
@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; // 过滤器执行顺序
    }
}

自定义路由定位器

java 复制代码
@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 是构建现代微服务架构的理想选择,特别适合需要高性能、灵活路由和丰富过滤功能的场景。

相关推荐
不吃香菜学java1 小时前
Redis的java客户端
java·开发语言·spring boot·redis·缓存
captain3762 小时前
事务___
java·数据库·mysql
北漂Zachary2 小时前
四大编程语言终极对比
android·java·php·laravel
小江的记录本2 小时前
【网络安全】《网络安全常见攻击与防御》(附:《六大攻击核心特性横向对比表》)
java·网络·人工智能·后端·python·安全·web安全
ERBU DISH2 小时前
当遇到 502 错误(Bad Gateway)怎么办
gateway
橙露3 小时前
SpringBoot 整合 MinIO:分布式文件存储上传下载
spring boot·分布式·后端
小眼哥3 小时前
SpringBoot整合Vue代码生成exe运行程序以及windows安装包
vue.js·windows·spring boot
嗑嗑嗑瓜子的猫3 小时前
Java!它值得!
java·开发语言
2401_895521344 小时前
【Spring Security系列】Spring Security 过滤器详解与基于JDBC的认证实现
java·后端·spring
皮卡蛋炒饭.4 小时前
线程的概念和控制
java·开发语言·jvm