一、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 进行配置时,我们需要注意以下几点:
- 尽量使用 Route 而不是 Filter,因为 Route 比 Filter 更加灵活。
- 遵守 SOLID 原则,将 Filter 拆分成一个个小的、可复用的 Filter。
- 使用 WebFlux,因为它能够较好地支持 Reactor、Netty 以及 Spring Boot 2.x。
- 使用 Spring Cloud Admin 来进行监控和管理。