您的位置:

深入理解 Gateway 配置

一、Gateway 的作用

Gateway 是 API 网关的核心部件。其作用是将外部请求整合到内部API,从而保证系统的安全和稳定。同时,Gateway 还可以对请求进行鉴权和限流,确保系统的可用性。

通过 Gateway 配置控制,我们可以方便地实现请求路由、限流和过滤等功能。下面我们将详细介绍 Gateway 配置的各种用法。

二、路由功能

路由功能指的是将外部请求转发到内部API的过程。通常,我们将请求转发到不同的服务中心,以实现不同的功能。

在 Gateway 中,路由功能可以通过配置 Route 进行实现。以下是一个简单的路由配置示例:

spring:
  cloud:
    gateway:
      routes:
        - id: user_service
          uri: lb://user-service
          predicates:
            - Path=/api/user/**

上述配置中,我们定义了一个名为 user_service 的 Route。它将请求转发到内部服务 user-service 中,并且只有请求路径是 /api/user/** 的请求会匹配到这条路由规则。

三、限流功能

限流功能指的是对请求进行限制,从而避免对服务造成过大的压力。

在 Gateway 中,限流功能可以通过配置 Filter 实现。以下是一个简单的限流配置示例:

spring:
  cloud:
    gateway:
      default-filters:
        - name: RequestRateLimiter
          args:
            key-resolver: "#{@userKeyResolver}"
            redis-rate-limiter.replenishRate: 1
            redis-rate-limiter.burstCapacity: 2
    application:
      name: gateway-service
  redis:
    host: localhost
    port: 6379

上述配置中,我们定义了一个名为 RequestRateLimiter 的 Filter。它使用 Redis Rate Limiter 对请求进行限流。限流的速率为每秒 1 次请求,最大处理能力为 2 次请求。

四、过滤功能

过滤功能指的是对请求进行过滤,从而达到安全过滤、业务过滤和性能优化等效果。

在 Gateway 中,过滤功能可以通过配置 Global Filter 和 Route Filter 实现。以下是一个简单的过滤配置示例:

spring:
  cloud:
    gateway:
      routes:
        - id: user_service
          uri: lb://user-service
          predicates:
            - Path=/api/user/**
          filters:
            - name: AuthFilter
              args:
                token: test-token
  application:
    name: gateway-service

上述配置中,我们同时使用了全局过滤和路由过滤。全局过滤是指对所有请求都起作用的过滤器,而路由过滤是指只对特定路由的请求起作用的过滤器。

在上述配置中,我们定义了一个名为 AuthFilter 的过滤器,并设置了一个名为 token 的参数。该过滤器将会对所有经过 user_service 路由的请求进行安全过滤。

五、优化建议

在使用 Gateway 进行配置时,我们需要注意以下几点:

  1. 尽量使用 Route 而不是 Filter,因为 Route 比 Filter 更加灵活。
  2. 遵守 SOLID 原则,将 Filter 拆分成一个个小的、可复用的 Filter。
  3. 使用 WebFlux,因为它能够较好地支持 Reactor、Netty 以及 Spring Boot 2.x。
  4. 使用 Spring Cloud Admin 来进行监控和管理。